Назад | Перейти на главную страницу

Системная ошибка в Apache с комбинацией перенаправления https плюс требование пароля плюс документ об ошибке

В хосте Apache 2 у меня есть следующая конфигурация (в моем случае в .htaccess корня документа (который для простоты одинаков для http: 80 и https: 443)

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

чтобы перенаправить любые http-соединения на https.

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

для создания настраиваемых сообщений об ошибках. Третий ингредиент - это защищенная подпапка с обязательной аутентификацией (согласно .htaccess в этой папке):

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

Все работает нормально, кроме тех случаев, когда кто-то пытается получить http://example.com/protectedfolder На самом деле происходит то, что клиент получает 302 Found ответить с перенаправлением на https://example.com/error.php

С другой стороны,

В Apache error.log нет конкретной записи, но похоже, что проблема возникает из-за того, что требование Auth оценивается перед перезаписью, поэтому вызывает ErrorDocument, и это ошибочно по-прежнему http ??

Что мне нужно изменить, чтобы получить желаемый эффект, т.е. http://example.com/protectedfolder вызывает перенаправление на https://example.com/protectedfolder и только этот перенаправленный URL вызывает (настраиваемый) 401?

Поскольку вы делаете безусловное перенаправление с http к https (плохая идея, если вы хотите, чтобы каждый имел доступ к публичной информации на вашем сайте., BTW), тогда вы должны просто сделать отдельные записи хоста для :80 и :443, и укажите :80 запись к чему-то вроде пустой папки - тогда у вас не будет конкуренции mod_auth с mod_rewrite.