Обычная аутентификация только для DirectoryIndex
Я пытаюсь настроить базовую аутентификацию для моего индексного файла и только для моего индексного файла. Я настроил это так:
<Files index.htm>
Order allow,deny
Allow from all
AuthType Basic
AuthName "Some Auth"
AuthUserFile "C:/path/to/my/.htpasswd"
Require valid-user
</Files>
Когда я захожу на страницу, 401 Authorization Required
возвращается, как и ожидалось, но браузер не запрашивает имя пользователя / пароль. Дальнейшая проверка показала, что Apache не отправляет WWW-Authenticate
заголовок.
GET http://myhost/ HTTP/1.1
Host: myhost
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
HTTP/1.1 401 Authorization Required
Date: Tue, 21 Jun 2011 21:36:48 GMT
Server: Apache/2.2.16 (Win32)
Content-Length: 401
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Authorization Required</title>
</head><body>
<h1>Authorization Required</h1>
<p>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.</p>
</body></html>
Почему Apache делает это? Как я могу настроить его для отправки этого заголовка соответствующим образом?
Стоит отметить, что этот точно такой же набор директив работает нормально, если я установлю их для всего каталога. Только когда я настраиваю их на индекс каталога, они не работают. Вот как я знаю мой.htpasswd, и все в порядке.
Я использую Apache 2.2 на Windows.
С другой стороны, я обнаружил, что это перечислено как ошибка в Apache 1.3. Это наводит меня на мысль, что на самом деле это проблема конфигурации с моей стороны.
4 ответа
Я могу воспроизвести это на Apache 2.2 под Fedora. Это похоже на ошибку. Обходной путь должен использовать:
<Files ~ "(^index.htm$)|(^$)">
Вот еще одна похожая ошибка: https://issues.apache.org/bugzilla/show_bug.cgi?id=46685
Возможно, вы захотите начать с корректировки директивы Files (
Размещенная вами конфигурация отлично работает при установке Debian - Apache 2.2. Я бы посоветовал попытаться увидеть, если поместить его в <Location>
директива - и попробуйте на 2 разных браузерах.
Для простого случая ваш конфиг выглядит нормально (см. Этот пост для примера), поэтому я бы начал с рассмотрения любых факторов, которые могут сделать это непростым делом, и устранения их до тех пор, пока вы не найдете тот, который вызывает проблему.
Например:
- Вы обращаетесь к "index.htm" конкретно или полагаетесь на DirectoryIndex для его автоматической загрузки при доступе к " http://site.url/"?
- "Index.htm" настроен в DirectoryIndex?
- Вы пытались сделать это первым вариантом?
- Поскольку вы работаете в Windows, вы уверены, что регистр букв в именах файлов - это то, что вы думаете? Например, Windows отображает имена файлов в верхнем регистре в регистр предложений для отображения.
- Вы пытались установить этот параметр для файла, который не находится в DirectoryIndex (test.html), чтобы увидеть, если это связано?
Документы Apache имеют хорошую страницу, подробно описывающую работу каталога, файлов и местоположения, с некоторыми примерами для дальнейшего использования.
Я думаю, что существует конфликт между директивой:
allow from all
и директива
require valid user
Мне интересно, если вы удалите разрешение от всех из записи конфигурации, это может сделать то, что вы хотите сделать.
Кстати, я бы вместо этого поменял файлы index.html на Location /index.html.