2010-12-02 3 views
9

Вот соответствующая часть файла .htaccess:Пользовательские страницы ошибок в Apache2 для 401

AuthUserFile /var/www/mywebsite/.htpasswd 
AuthGroupFile /dev/null 
AuthName protected 
AuthType Basic 
Require valid-user 

ErrorDocument 400 /var/www/errors/index.html 
ErrorDocument 401 /var/www/errors/index.html 
ErrorDocument 403 /var/www/errors/index.html 
ErrorDocument 404 /var/www/errors/index.html 
ErrorDocument 500 /var/www/errors/index.html 

Docuement корень установлен в/вар/WWW/МойВебСайт/Интернет, это на многих виртуальный хост одновременно. Я могу перейти на страницу index.html.

Все, что я вижу, это общая страница Apache 401, любые мысли.

EDIT: Это сообщение об ошибке в браузере:

Authorization Required

This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.

Additionally, a 401 Authorization Required error was encountered while trying to use an ErrorDocument to handle the request. Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny8 with Suhosin-Patch Server at www.dirbe.com Port 80

ответ

7

Убедитесь, что/вар/WWW/ошибки читается пользователем апача и включить это в вашей конфигурации Apache:

<Directory /var/www/errors> 
    Order allow,deny 
    Allow from all 
</Directory> 
+1

Не повезло. И ничто в любом из журналов ошибок. Я вижу это на странице с ошибкой: «Кроме того, при попытке использовать ErrorDocument для обработки запроса была обнаружена ошибка авторизации 401». – 2010-12-03 00:32:17

+0

Попробуйте положить требуемые строки авторизации внутри раздела . – 2010-12-03 00:58:15

3

Этот вопрос (и ответы и комментарии) помог мне кучу, спасибо большое!

Я решил немного по-другому, и хотел поделиться. В этом случае нам нужно было предоставить пользовательский документ с ошибкой 401 и корневой путь, необходимый для проксирования в бэкэнд-приложение.

Так, например, http://example.com необходимо для обслуживания контента от http://internal-server:8080/. Кроме того, http://example.com необходимо защитить с помощью Basic Auth с помощью специального документа с ошибкой 401.

Итак, я создал каталог с именем «error» в DocumentRoot. Вот соответствующие строки от vhost:

ErrorDocument 401 /error/error401.html 

    # Grant access to html files under /error 
<Location "/error"> 
Options -Indexes 
Order Deny,Allow 
Allow from all 
</Location> 

    # restrict proxy using basic auth 
<Proxy *> 
Require valid-user 
AuthType basic 
AuthName "Basic Auth" 
AuthUserFile /etc/apache2/.htpasswd 
</Proxy> 

    # Proxy everything except for /error 
ProxyRequests Off 
ProxyPass /error ! 
ProxyPass/http://internal:8080/ 
ProxyPassReverse/http://internal:8080/ 
0

ErrorDocument принимает абсолютный путь URL, а не путь к файлу. Так должно быть:

ErrorDocument 404 /error/error.html 

Предполагая, что ваш корень документа является файлом /error/error.html.

Смежные вопросы