Я хотел бы использовать htaccess, чтобы разрешить доступ к индексному файлу и нескольким другим файлам в каталоге (index.php), но для всего остального в каталоге требуется пользователь / пароль. Прямо сейчас у меня есть:
AuthName "SomeServer"
AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null
Require valid-user
AuthType Basic
<FilesMatch "(index.php)|(login.php)">
Allow from all
Satisfy any
</FilesMatch>
Это позволяет пользователям получать доступ к index.php и login.php и запрещает остальную часть каталога. Однако всякий раз, когда пользователь запрашивает каталог без index.php в URL-адресе, например:
http://www.example.com/dir
Пользователю предлагается войти в систему. Однако, если пользователь идет сюда:
http://www.example.com/dir/index.php
Затем index.php отображается без приглашения на вход.
Что мне нужно изменить, чтобы пользователь мог перейти к http://www.example.com/dir и быть направленным к http://www.example.com/dir/index.php без запроса входа в систему, при этом требуя входа в систему для чего-либо еще в каталоге?
Обновление: не уверен, что это важно, но я переключил аутентификацию на использование mod_auth_mysql. Все еще использую тот же раздел моего файла htaccess и все еще сталкиваюсь с той же проблемой.
Вы можете попробовать что-то вроде следующего
<VirtualHost *:80>
ServerName localhost
DocumentRoot /vhosts/default
DirectoryIndex index.php
<Directory /vhosts/default>
Options -Indexes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<Location ~ ^/dir/(index|login)\.php$>
Allow from all
Satisfy any
</Location>
<Location ~ ^/dir/?$>
Allow from all
Satisfy any
</Location>
</VirtualHost>
Сделайте несколько основных тестов
# curl -I http://localhost/
HTTP/1.1 401 Authorization Required
Date: Fri, 19 Feb 2016 10:03:38 GMT
Server: Apache/2.2.15 (CentOS)
WWW-Authenticate: Basic realm="SomeServer"
Content-Type: text/html; charset=iso-8859-1
# curl -I http://localhost/index.php
HTTP/1.1 401 Authorization Required
Date: Fri, 19 Feb 2016 10:03:43 GMT
Server: Apache/2.2.15 (CentOS)
WWW-Authenticate: Basic realm="SomeServer"
Content-Type: text/html; charset=iso-8859-1
# curl -I http://localhost/dir/index.php
HTTP/1.1 200 OK
Date: Fri, 19 Feb 2016 10:03:49 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.6.16
Content-Type: text/html; charset=UTF-8
# curl -I http://localhost/dir/
HTTP/1.1 200 OK
Date: Fri, 19 Feb 2016 10:03:52 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.6.16
Content-Type: text/html; charset=UTF-8
# curl -I http://localhost/dir/some_file.php
HTTP/1.1 401 Authorization Required
Date: Fri, 19 Feb 2016 10:04:07 GMT
Server: Apache/2.2.15 (CentOS)
WWW-Authenticate: Basic realm="SomeServer"
Content-Type: text/html; charset=iso-8859-1
# curl -I http://localhost/dir
HTTP/1.1 301 Moved Permanently
Date: Fri, 19 Feb 2016 10:04:14 GMT
Server: Apache/2.2.15 (CentOS)
Location: http://localhost/dir/
Content-Type: text/html; charset=iso-8859-1