Error del sistema en Apache con combinación de redirección https más requisito de contraseña más documento de error

Error del sistema en Apache con combinación de redirección https más requisito de contraseña más documento de error

En un vhost Apache 2 tengo la siguiente configuración (en mi caso, en .htaccessla raíz del documento (que por simplicidad es la misma para http:80 y https:443)

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

para redirigir cualquier conexión http a https Además,

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

para producir mensajes de error personalizados. El tercer ingrediente es una subcarpeta protegida que requiere autenticación (por .htaccessen esa carpeta):

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

Todo funciona bien excepto cuando alguien intenta recuperar. http://example.com/protectedfolderDe hecho, lo que sucede es que el cliente recibe una 302 Foundrespuesta con una redirección ahttps://example.com/error.php

Por otro lado,

  • https://example.com/protectedfolderconduce a una costumbre (es decir, producida por error.php) 401como se esperaba.
  • http://example.com/publicfolderconduce a 302una redirección a https://example.com/publicfolder, luego una 301redirección permanente a https://example.com/publicfolder/y, finalmente (ya que DirectoryIndex está deshabilitado) un 403error personalizado. Como se esperaba.
  • Además, http://example.com/nonexistentprovoca un 302to https://example.com/nonexistenty luego un custom 404, también como se esperaba.
  • Si desactivo la ErrorDocument 401configuración, aparece una consulta de http://example.com/protectedfoldercausas 401inmediatamente, es decir, sin redirección a https.

No hay una entrada específica en Apache error.log, pero parece que el problema ocurre porque el requisito de autenticación se evalúa antes de la reescritura, por lo que invoca el ErrorDocument y sigue siendo http de manera errónea.

¿Qué necesito cambiar para tener el efecto deseado, es decir, que http://example.com/protectedfoldercause una redirección https://example.com/protectedfoldery solo esa URL redirigida cause una (personalizada) 401?

Respuesta1

Dado que realiza una redirección incondicional desde httpa https(una mala idea si desea que todos puedan acceder a la información pública de su sitio web, Por cierto), entonces deberías crear entradas de host separadas para :80y :443y apuntar la :80entrada hacia algo así como una carpeta vacía; entonces no tendrías que mod_auth compita con mod_rewrite.

información relacionada