Erro de sistema no Apache com combinação de redirecionamento https mais exigência de senha mais documento de erro

Erro de sistema no Apache com combinação de redirecionamento https mais exigência de senha mais documento de erro

Em um vhost Apache 2 eu tenho a seguinte configuração (no meu caso, na .htaccessraiz do documento (que é a mesma para http:80 e https:443)

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

para redirecionar quaisquer conexões http para https Além disso,

ErrorDocument 500 /error.php
ErrorDocument 404 /error.php
ErrorDocument 403 /error.php
ErrorDocument 402 /error.php
ErrorDocument 401 /error.php

para produzir mensagens de erro personalizadas. O terceiro ingrediente é uma subpasta protegida com autenticação necessária (por .htaccessdentro dessa pasta):

AuthType Basic
AuthName "Test"
AuthUserFile  /some/path/to/passwords
Require user joe

Tudo funciona bem, exceto quando alguém tenta recuperar. http://example.com/protectedfolderNa verdade, o que acontece é que o cliente recebe uma 302 Foundresposta com redirecionamento parahttps://example.com/error.php

Por outro lado,

  • https://example.com/protectedfolderleva a um custom (ou seja, produzido por error.php) 401conforme esperado.
  • http://example.com/publicfolderleva ao 302redirecionamento para https://example.com/publicfolder, em seguida, um 301redirecionamento permanente para https://example.com/publicfolder/e, finalmente (como DirectoryIndex está desabilitado), um 403erro personalizado. Como esperado.
  • Além disso, http://example.com/nonexistentcausa um 302to https://example.com/nonexistente, em seguida, um customizado 404, também conforme o esperado.
  • Se eu desabilitar a ErrorDocument 401configuração, uma consulta por http://example.com/protectedfoldercausa 401imediatamente, ou seja, sem redirecionamento para https.

Não há nenhuma entrada específica no Apache error.log, mas parece que o problema ocorre porque o requisito Auth é avaliado antes da Reescrita, invocando assim o ErrorDocument e que ainda é http??

O que preciso alterar para ter o efeito desejado, ou seja, que http://example.com/protectedfoldercause um redirecionamento para https://example.com/protectedfoldere somente esse URL redirecionado cause um (personalizado) 401?

Responder1

Já que você redireciona incondicionalmente de httppara https(uma má ideia se você deseja que todos possam acessar as informações públicas em seu site, BTW), então você deve apenas criar entradas de host separadas para :80e :443e apontar a :80entrada para algo como uma pasta vazia - então você não teria o mod_auth competindo com o mod_rewrite.

informação relacionada