Existe uma maneira limpa de redirecionar todas as tentativas de acessar uma versão HTTP: // de um site para seu equivalente HTTPS: //?
Existe uma maneira limpa de redirecionar todas as tentativas de acessar uma versão HTTP: // de um site para seu equivalente HTTPS: //?
Respostas:
Eu acho que a maneira mais limpa é como descrito aqui no IIS-aid.com . É apenas web.config e, portanto, se você mudar de servidor, não precisará se lembrar de todas as etapas que você seguiu com a página de erro personalizada 403.4 ou outras permissões especiais, apenas funcionará.
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
A solução mais fácil e limpa que encontrei foi
Em Configurações SSL -> exigir SSL
Nas páginas de erro -> no erro 403.4 -> redirecionar para o site HTTPS
Em Páginas de erro -> Editar configurações dos recursos ... -> Definir erros detalhados para solicitações locais e páginas de erro personalizadas para solicitação remota
O benefício é que ele não requer linhas extras de código. A desvantagem é que ele o redireciona para um URL absoluto.
Uma maneira limpa altera apenas o esquema de URL de http -> https e deixa todo o resto equivalente. Deve estar do lado do servidor para que não haja problemas no navegador.
O JPPinto.com possui instruções passo a passo sobre como isso é feito, exceto pelo uso de javascript (HttpRedirect.htm) em vez de um redirecionamento do servidor. Por alguma razão, não consegui que o IE execute o javascript se você tiver 'Mostrar mensagens de erro HTTP amigáveis' ativadas, o que está ativado por padrão. Outra coisa com o script é que o redirecionamento para o caminho não funcionou nem no FF ou no Chrome. O script sempre redireciona para o root. (Talvez eu tenha perdido algo, porque deve redirecionar para o caminho.)
Por esses motivos, usei uma página ASP para o redirecionamento. A desvantagem é, obviamente, que isso requer que o ASP clássico seja ativado no servidor.
OpsanBlog possui um script ASP e instruções que funcionam bem com o IIS6.
Eu tive alguns problemas ao usar esse método com o IIS7. Na maioria das vezes, a interface do usuário é problemática, já que o IIS7 facilita muito a perda de algo.
O gerenciador do IIS deve mostrar o nome do arquivo no cabeçalho.
Global.asax
protected void Application_BeginRequest()
{
if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection)
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:"));
}
Eu uso asp clássico (intranet) e em páginas que exigem login, o arquivo de inclusão de logon faz o redirecionamento:
if Request.ServerVariables("SERVER_PORT_SECURE") <> "1" or Request.ServerVariables("HTTPS") <> "on" then
Response.Redirect "https://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")
end if
Obviamente, isso não inclui dados GET ou POST. Portanto, na verdade, é um redirecionamento limpo para sua página segura.