У меня есть файлы с одинаковыми именами в разных каталогах на серверах (пример: stats.php), и я хочу защитить паролем некоторые из них (файл .htaccess в корневом каталоге). Я попробовал «FilesMatch» с путем к файлу, и это не сработало, и я попытался добавить путь «Каталог» следующим образом, та же проблема.
<Directory /var/www/vhosts/folder/httpdocs/directory/>
<FilesMatch "stats.php">
AuthName "Private file"
AuthType Basic
AuthUserFile /var/www/whatever/.htpasswd
require valid-user
</FilesMatch>
</Directory>
Один .htaccess
файл в корневом каталоге не подходит для этой цели. Вы должны разместить новый .htaccess
файл в каждый каталог, где вам нужны настройки, отличные от его родительских:
.htaccess
Файлы (или «распределенные файлы конфигурации») позволяют вносить изменения в конфигурацию для отдельных каталогов. Файл, содержащий одну или несколько директив конфигурации, помещается в конкретный каталог документа, и директивы применяются к этому каталогу и всем его подкаталогам.
В <Directory>
Директива разрешено только в конфигурация сервера и виртуальный хост контексты. В .htaccess
file - это его эквивалент, помещенный непосредственно в каталог. У вас есть два варианта:
/var/www/vhosts/folder/httpdocs/directory/.htaccess
с <FilesMatch "stats.php">
. Это единственный способ, если у вас нет доступа к конфигурации сервера.<Directory /var/www/vhosts/folder/httpdocs/directory/>
в конфигурация сервера или в виртуальный хост. Это лучше по производительности, поскольку он загружается один раз при запуске Apache, а не при каждом запросе.Если вы используете Apache 2.4, вы можете использовать Если директива который соответствует запросу, чтобы определить, требуется ли авторизация, а именно:
<If "%{REQUEST_URI} =~ /stats.php$/">
AuthName "Private file"
AuthType Basic
AuthUserFile /var/www/whatever/.htpasswd
Require valid-user
ErrorDocument 401 "Authorization Required"
</If>