除了一个特定的文件夹及其子文件夹,我正在尝试阻止所有对特定文件夹和子文件夹中的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
答案 0 :(得分:1)
结果比我想的要简单得多:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^(?!.*(thedirectory)).*(?i:php)$ [NC]
RewriteRule "(.*)" /404.php
</IfModule>
答案 1 :(得分:0)
<Files>
和<FilesMatch>
部分仅匹配文件名,而不匹配目录路径。因此,尝试这样做自然会失败。
另一种方法是简单地在要允许访问的目录中创建一个额外的.htaccess
文件,该文件将覆盖父文件:
Require all granted