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

В Apache 2 vhost у меня есть следующая конфигурация (в моем случае, в .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 На самом деле, что происходит, то, что клиент получает a 302 Found ответ с перенаправлением к https://example.com/error.php

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

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

Нет никакой определенной записи в Apache error.log, но кажется, что проблема происходит, потому что Подлинное требование оценено перед Переписыванием, таким образом вызывает ErrorDocument, и это неправильно все еще http??

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

0
задан 5 October 2015 в 13:29
1 ответ

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

1
ответ дан 4 December 2019 в 16:48

Теги

Похожие вопросы