Пользовательская страница ошибки в Apache2 для 401

Вот соответствующая часть файла .htaccess:

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

Корень документа установлен в /var/www/mywebsite/web, он находится на многих виртуальных хостах. Я могу перейти на страницу index.html.

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

РЕДАКТИРОВАТЬ: Это сообщение об ошибке в моем браузере:

Требуется Авторизация

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

Кроме того, возникла ошибка 401 Authorization Required при попытке использовать ErrorDocument для обработки запроса. Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny8 с сервером Suhosin-Patch на www.dirbe.com Порт 80


person Parris Varney    schedule 02.12.2010    source источник


Ответы (3)


Убедитесь, что /var/www/errors доступен для чтения пользователю apache, и включите это в свою конфигурацию apache:

<Directory /var/www/errors>
  Order allow,deny
  Allow from all
</Directory>
person Sam Coles    schedule 03.12.2010
comment
Не повезло. И ничего ни в одном из журналов ошибок. Однако я вижу это на странице ошибки: Кроме того, при попытке использовать ErrorDocument для обработки запроса возникла ошибка 401 Authorization Required. - person Parris Varney; 03.12.2010
comment
Попробуйте поместить требуемые строки аутентификации в раздел ‹Location /›‹/Location›. - person Sam Coles; 03.12.2010
comment
спасибо за подсказку, но бесполезно. Получил ошибку: ‹Местоположение не разрешено здесь - person Parris Varney; 03.12.2010
comment
В документации Apache сказано, что ErrorDocument может быть путем относительно корня документа или внешним URL-адресом, который будет отправлен с перенаправлением. Поскольку вы получаете сообщение о необходимости аутентификации, вам могут понадобиться два соседних каталога, один в /errors и один в /protected, где .htaccess в /protected будет ссылаться на /errors/401.html как на ErrorDocument. - person Sam Coles; 03.12.2010
comment
Последний комментарий Сэма решил мою проблему, поэтому я принял его первоначальный ответ. - person Parris Varney; 07.12.2010
comment
Я только что наткнулся на эту ветку и после прочтения документации Apache обнаружил, что ErrorDocument не только МОЖЕТ быть путем относительно корня документа, но и ДОЛЖЕН быть относительно DocumentRoot. Кажется, нет способа поместить эти ErrorDocs из каталога DR. - person Alex Reds; 28.04.2014
comment
Другими словами, ErrorDocument, если это путь, является не путем к файлу, а URL-путь, и этот путь должен быть доступен как обычный документ (например, в DocumentRoot). Это связано с тем, что директива ErrorDocument выполняет простое перенаправление. Выбранный выше ответ (с использованием Directory) вводит в заблуждение и является правильным только в сочетании с соответствующей конфигурацией DocumentRoot и (необязательной) спецификацией блока VirtualHost. - person Peterino; 23.08.2019

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

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

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

Итак, я создал каталог с именем «ошибка» в 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/
person Upgradingdave    schedule 30.08.2011
comment
Пробовал это, но я получаю страницу с ошибкой, прежде чем попросить войти. Любые идеи? - person user2643679; 23.02.2017

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

ErrorDocument 404 /error/error.html

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

person Батырбек Бақытжанов    schedule 19.02.2018
comment
Это должен быть выбранный ответ. Важным моментом является URL-путь. Не путайте его с путем file! - person Peterino; 23.08.2019
comment
Также убедитесь, что файл в этом месте доступен как обычный документ (например, так же, как index.html в вашем DocumentRoot). Это связано с тем, что директива ErrorDocument выполняет простое перенаправление, без прямого чтения (файла или) местоположения. - person Peterino; 23.08.2019