Pergunta

Existe uma maneira limpa de redirecionar todas as tentativas de acessar uma versão HTTP:// de um site para seu equivalente HTTPS://?

Foi útil?

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

  1. Nas configurações de SSL -> requer SSL

  2. Em páginas de erro -> No erro 403.4 -> Redirecionar para o site HTTPS

  3. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top