Назад | Перейти на главную страницу

Запрещение доступа ко всем файлам, кроме index.php, но разрешение доступа через «/» в файле htaccess

Когда я пытаюсь ограничить доступ к файлам только 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]