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

Системная ошибка в 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

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

  • https://example.com/protectedfolderприводит к пользовательскому (т.е. созданному error.php), 401как и ожидалось.
  • http://example.com/publicfolderприводит к 302перенаправлению на https://example.com/publicfolder, затем к 301постоянному перенаправлению на https://example.com/publicfolder/, и наконец (поскольку DirectoryIndex отключен) к настраиваемой 403ошибке. Как и ожидалось.
  • Кроме того, http://example.com/nonexistentвызывается , 302а https://example.com/nonexistentзатем настроенный 404, также как и ожидалось.
  • Если я отключу ErrorDocument 401конфигурацию, то запрос будет http://example.com/protectedfolderвыполнен 401сразу, т.е. без перенаправления на https.

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

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

решение1

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

Связанный контент