Блокировать файлы php кроме одного каталога - PullRequest
1 голос
/ 30 мая 2019

Я пытаюсь заблокировать все обращения к php-файлам в определенной папке и подпапках, кроме одной определенной папки и ее подпапок.

Я пробовал несколько различных перестановок регулярных выражений, и я могу заставить регулярное выражение соответствовать должным образом, это реализуется в htaccess, где у меня есть проблема.

Это файл htaccess, как сейчас:

<FilesMatch "\.(?i:php)$">
  <IfModule !mod_authz_core.c>
    Order allow,deny
    Deny from all
  </IfModule>
  <IfModule mod_authz_core.c>
    Require all denied
  </IfModule>
</FilesMatch>

и это выражение регулярного выражения, которое правильно совпадает вне htaccess:

^(?!.*(thedirectory)).*(?i:php)$

Когда я проверяю это регулярное выражение в index.php, оно совпадает. Когда я проверяю файл /thedirectory/index.php, он не совпадает. Когда я проверяю файл /someotherdirectory/style.css, он не совпадает.

Как бы я хотел, чтобы это работало:

domain.com/folder/index.php -> 404 Error
domain.com/folder/thedirectory/index.php -> resolves
domain.com/folder/someotherdirectory/index.php -> 404 Error
domain.com/folder/someotherdirectory/afunction.php -> 404 Error
domain.com/folder/someotherdirectory/style.css -> resolves

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Оказалось намного проще, чем я думал:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_URI} ^(?!.*(thedirectory)).*(?i:php)$ [NC]
    RewriteRule "(.*)" /404.php
</IfModule>
0 голосов
/ 31 мая 2019

Разделы <Files> и <FilesMatch> соответствуют только имени файла, а не пути к каталогу. Так что попытка сделать это, естественно, потерпит неудачу.

Альтернативный подход - просто создать дополнительный файл .htaccess в каталоге, к которому вы хотите разрешить доступ, который переопределит родительский:

Require all granted
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...