Pergunta
Existe uma maneira limpa de redirecionar todas as tentativas de acessar uma versão HTTP:// de um site para seu equivalente HTTPS://?
Solução
Eu acho que a maneira mais limpa é como descrita aqui no IIS-aid.com.É apenas web.config e, portanto, se você mudar de servidor, não precisará se lembrar de todas as etapas executadas com a página de erro personalizada 403.4 ou outras permissões especiais, ela simplesmente funciona.
<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>
Outras dicas
A solução mais fácil e limpa que encontrei foi
Nas configurações de SSL -> requer SSL
Em páginas de erro -> No erro 403.4 -> Redirecionar para o site HTTPS
Em páginas de erro -> Editar configurações de recursos...-> Definir erros detalhados para solicitações locais e páginas de erro personalizadas para solicitações remotas
A vantagem é que não requer linhas extras de código.A desvantagem é que ele redireciona você para um URL absoluto.
Uma forma limpa altera apenas o esquema de URL de http -> https e deixa todo o resto equivalente.Deve ser do lado do servidor para que não haja problemas de navegador.
JPPinto.com tem Instruções passo a passo sobre como isso é feito, exceto que eles usam javascript (HttpRedirect.htm) em vez de um redirecionamento do lado do servidor.Por algum motivo, não consegui fazer com que o IE executasse o javascript se você tivesse ‘Mostrar mensagens de erro HTTP amigáveis’ ativado, que está ativado por padrão.Outra coisa com o script é que o redirecionamento para path não funcionou nem no FF ou no Chrome.O script sempre redireciona para root.(Talvez eu tenha perdido alguma coisa, porque deveria redirecionar para o caminho.)
Por estas razões, usei uma página ASP para o redirecionamento.A desvantagem é que isso requer que o ASP clássico esteja habilitado no servidor.
OpsanBlog tem um Script e instruções ASP que funcionam bem com o IIS6.
Tive alguns problemas ao usar esse método com o IIS7.Principalmente problemas de interface do usuário, já que o IIS7 torna muito fácil perder alguma coisa.
- Primeiro, você precisa instalar o ASP como um recurso de função do servidor da web.
- Segundo, o uso de um diretório virtual não funcionou como esperado no IIS7 e não tentei depurar isso.Em vez disso, coloquei o arquivo na pasta raiz do site e usei o URL '/SSLredirect.asp' na página de erro 403.4 para fazer referência a ele.
- Por último, a parte mais complicada, você NÃO deve impor SSL para SSLRedirect.asp.Caso contrário, você receberá um erro 403.4.Para fazer isso, você escolhe o arquivo em 'Visualização de conteúdo' do IIS7 e muda para 'Visualização de recursos' para poder editar as configurações de SSL para o arquivo único e desabilitar a caixa de seleção 'Exigir SSL'.
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 include 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
É claro que isso não inclui dados GET ou POST.Então, na verdade, é um redirecionamento limpo para sua página segura.
Acho que por 'limpo' você quer dizer um redirecionamento 300.Configuração para muitos servidores e idiomas aqui.