Когда я пытаюсь ограничить доступ к файлам только index.php
используя что-то похожее на ответ в приведенной ниже ссылке, я не могу получить доступ через индекс каталога, такой как "DIRECTORY /" и "DIRECTORY".
Я хочу иметь возможность сделать следующее и запретить все файлы, кроме index.php
из .htaccess
файл в DIRECTORY.
Запрет доступа ко всем файлам, кроме index.html apache
DIRECTORY/index.php?get1=val1
DIRECTORY/?get1=val1
DIRECTORY?get1=val1
Чтобы разрешить mod_dir выполнять внутренний подзапрос для DirectoryIndex
при запросе пустого каталога вам просто нужно сделать соответствие файла необязательным, чтобы он также соответствовал практически пустому имени файла.
Например:
Order allow,deny
Deny from all
<FilesMatch ^(index\.php)?$>
Allow from all
</FilesMatch>
Это позволяет обоим
DIRECTORY/index.php?get1=val1
DIRECTORY/?get1=val1
куда DIRECTORY
это любой каталог (включая корень документа).
Однако это не позволяет DIRECTORY?get1=val1
(без косой черты после имени каталога). Строго говоря, это недопустимый URL-адрес в Apache. Обычно mod_dir «исправляет» URL-адрес, отправляя 301 редирект для добавления конечной косой черты. т.е. DIRECTORY?get1=val1
перенаправлен извне на DIRECTORY/?get1=val1
. К сожалению, указанные выше директивы авторизации блокируют выполнение этого перенаправления mod_dir.
Если вы специально хотели разрешить DIRECTORY?get1=val1
(без косой черты), тогда вы могли бы вместо этого сделать все с mod_rewrite вместо mod_authz_host (Apache 2.2). Например, замените приведенное выше следующим:
RewriteEngine On
RewriteRule ^DIRECTORY/(?!index\.php|$) - [F]
Это блокирует доступ к содержимому конкретный DIRECTORY
, но позволяет /DIRECTORY/index.php
и /DIRECTORY/
для доступа. Это не делает ничего особенного с запросом на /DIRECTORY
(без косой черты в конце), но выполняется достаточно поздно в запросе для mod_dir, чтобы войти первым и выполнить перенаправление 301 (упомянуто выше).
(?!index\.php|$)
это отрицательный взгляд вперед - что успешно, когда index.php
или $
(конец URL) делает не соответствие. т.е. Соответствует всему, кроме index.php
и ничего.
Ссылка:
Если предоставленная вами ссылка не работает, можете ли вы сделать что-нибудь вроде
RewriteEngine on
RewriteRule ^DIRECTORY /DIRECTORY/index.php?get1=val1 [R=permanent,L]