Я использую .htaccess
правило, подобное приведенному ниже:
# BEGIN Disable access to all files EXCEPT
Order deny,allow
Deny from all
# Files
<Files ~ ".(doc|xlsx|xlsm|xls|pdf|docx|txt|rtf|rdf|odf)$">
Allow from all
</Files>
# Page Content
<Files ~ ".(css|js)$">
Allow from all
</Files>
# Images
<Files ~ ".(jpe?g|png|gif|bmp|cur|ico|webp)$">
Allow from all
</Files>
# Fonts
<Files ~ ".(svgz?|eot|otf|tt[cf]|woff2?)$">
Allow from all
</Files>
Однако я также хочу разрешить один конкретный .php
файла, я не хочу помещать правило .htaccess в папку, где .php
файл существует, поэтому я пытался сделать это с помощью FilesMatch
Вот некоторые примеры:
<FilesMatch "\/folder1\/folder2\/folder3\/folder4\/\.(php)">
Allow from all
Satisfy Any
</FilesMatch>
<FilesMatch "\folder1\folder2\folder3\folder4\file1.php">
Allow from all
Satisfy Any
</FilesMatch>
Я даже пробовал их с /home/hostaccount/public_html/
в начале локации, а также просто /public_html/
в начале локации.
Я пробовал добавить ^
в начало локации и закончил его $
в конце.
Кто-нибудь знает, что я делаю не так и, что более важно, как это исправить?
Нет большой разницы между <Files ~ "...">
или <FilesMatch "...">
(или <Files "...">
в этом контексте), поскольку все они просто совпадают с базовым именем файла, за исключением пути к каталогу.
Итак, если базовое имя файла уникальный в этом дереве каталогов вы можете просто сделать:
<Files "file-to-allow.php">
Allow from all
</Files>
Однако это будет соответствовать file-to-allow.php
везде в этом дереве каталогов, если одно и то же базовое имя файла встречается в нескольких каталогах.
Если вам нужно было сопоставить полный путь к файловой системе (или, строго говоря, URL-путь), без использования .htaccess
файл в целевом подкаталоге и без доступа к конфигурации сервера (что позволит вам использовать <Directory>
container), то с помощью mod_setenvif вы могли бы сделать что-то вроде следующего:
SetEnvIf Request_URI "^/path/to/file-to-allow\.php$" letmein
Allow from env=letmein
В SetEnvIf
директива устанавливает переменную среды letmein
если Request_URI
соответствует определенному URL-адресу (регулярное выражение). Затем это используется в следующих Allow
директива только позволять если установлена переменная окружения.