Пароль защищает AutoIndex, но не статические файлы с .htaccess - PullRequest
2 голосов
/ 01 октября 2009

У меня есть общедоступные файлы на моем веб-сервере. Я бы хотел включить автоиндексирование (параметры + индексы), но для просмотра этих списков мне нужен пароль. У меня нет проблем с настройкой Auth, но есть сложности с общими файлами и файлами DirectoryIndex в том, что если кто-то также запрашивает каталог, и существует файл DirectoryIndex, он не должен вводить пароль для этого. Из соображений безопасности только пароль для автоматического индексирования должен запрашивать пароль.

Вот что я придумал:

Options +Indexes
Options +FollowSymLinks

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}index.php -f
RewriteRule ^.*$ %{REQUEST_URI}index.php [R,NE,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}index.html -f
RewriteRule ^.*$ %{REQUEST_URI}index.html [R,NE,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}index.htm -f
RewriteRule ^.*$ %{REQUEST_URI}index.htm [R,NE,L]

<FilesMatch "^$">
AuthName "My Auth Name"
AuthType Basic
AuthUserFile /path/to/my/.htpasswd
Require valid-user
</FilesMatch>

Бит FilesMatch работает нормально. Любой запрос на каталог просят войти, но нормальные файлы проходят. Это легко, сложная часть - заставить DirectoryIndexes рендериться без входа в систему. Перезапись вверху была моей неудачной попыткой перенаправить запрос до того, как он запросил аутентификацию, но без кубиков, сначала запрашивается аутентификация, неважно что.

Я провел около 6 часов исследований по этому вопросу, и сейчас я собираюсь сдаться. Любая помощь будет оценена.

Редактировать: вот пример структуры каталогов.

/images/blah.jpg   <- does not require a password
/images/           <- requires a password to view listing
/index.html        <- does not require a password
/                  <- does not require a password because a DirectoryIndex file exists (index.html)

Ответы [ 2 ]

0 голосов
/ 24 декабря 2012

Я знаю, что это могила, но я надеюсь, что это может кому-нибудь помочь в поиске (например, я - я новичок во всем этом htaccess).

Я хотел сделать что-то подобное,хотя и проще, я думаю - я хотел продолжить использование автоиндекса Apache при доступе к каталогу, но иметь его защищенный паролем (а не отключать его вообще, для моей собственной выгоды) - но в то же время иметь любые файлы, свободно доступные при наличии ссылокнапрямую, чтобы люди могли получить к ним доступ без необходимости ввода имени пользователя и пароля.

Основной трюк с «паролем каталога», широко распространенный в Интернете, заключается в следующем:

AuthType Basic
AuthName "restricted area"
AuthUserFile /path/to/.htpasswd
require valid-user

Простое дополнениеограничение объема атрибута require достигло того, что я достиг:

AuthType Basic
AuthName "restricted area"
AuthUserFile /path/to/.htpasswd
<Files "">
require valid-user
</Files>

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

Если я пытаюсь получить доступ к каталогу с индексным файлом, он загружается как обычно - u / p не требуется.

Если я пытаюсьt для непосредственного доступа к файлу, он загружается как обычно, как указано выше, u / p не требуется.

Как и следовало ожидать, он также влияет на все подпапки.

Кажется, ведет себя таки до сих пор отлично работала, основываясь на моем тестировании.

0 голосов
/ 01 октября 2009

Просто удалите блок <FilesMatch>, чтобы применить его ко всем запросам, а не только к тем, которые запрашивают каталоги.

Options +Indexes +FollowSymLinks

RewriteEngine On
…

AuthName "My Auth Name"
AuthType Basic
AuthUserFile /path/to/my/.htpasswd
Require valid-user

Редактировать Почему вы просто не включили индексирование для тех каталогов, для которых вы хотите его разрешить?

...