Назад | Перейти на главную страницу

Базовая аутентификация только для 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. Это заставляет меня думать, что на самом деле это проблема конфигурации с моей стороны.

Я могу воспроизвести это на Apache 2.2 под Fedora. Похоже, это ошибка. Обходом является использование:

<Files ~ "(^index.htm$)|(^$)">

Вот еще одна похожая ошибка: https://issues.apache.org/bugzilla/show_bug.cgi?id=46685

Возможно, вы захотите начать с настройки директивы Files (<Files ./index.htm>), иначе она будет соответствовать любым файлам index.htm во всей структуре каталогов в этом .htaccess.

Опубликованная вами конфигурация идеально подходит для установки Debian - Apache 2.2. Я бы посоветовал попытаться увидеть, поместите ли его в <Location> директиву - и попробуйте ее в двух разных браузерах.

В простом случае ваша конфигурация выглядит нормально (см. эта почта в качестве примера), поэтому я бы начал с рассмотрения любых факторов, которые могут сделать это непростым случаем, и устранять их, пока не найдете тот, который вызывает проблему.

Например:

В документации Apache есть хорошая страница, подробно описывающая, как Каталог, файлы и расположение поработайте с некоторыми примерами для дальнейшего использования.

Я думаю, что есть конфликт между директивой:

 allow from all

и директива

 require valid user

Мне интересно, если вы сбросите разрешение со всех из записи конфигурации, это может сделать то, что вы хотите сделать.

Кстати, я бы также изменил файл index.html на Location /index.html.