我正在尝试编写.htaccess
规则以拒绝访问所有子文件夹中的所有.php
文件,但允许访问其中一个子目录中的单个文件,并且还使用RewriteRule
文件,如果Request URI
不为空,则有效,但当我访问/
时,显示禁止
现在我有:
<Files ~ "\.(php)$">
deny from all
</Files>
<Files Test.php>
allow from all
</Files>
Options +FollowSymLinks
Options All -Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /Sub/Test.php [QSA]
如何让它按预期工作?
答案 0 :(得分:1)
那是因为当您请求/
时,它会被映射到index.php
或您的索引文件,然后这个条件会失败:
RewriteCond %{REQUEST_FILENAME} !-f
您可以添加其他或'ed条件,以允许/
请求通过:
RewriteCond %{REQUEST_URI} ^/$ [OR]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /Sub/Test.php [QSA]
答案 1 :(得分:1)
实际上,只需2条规则即可轻松处理.php
的所有阻止。请考虑以下代码:
RewriteEngine On
# block any request with `.php
RewriteCond %{THE_REQUEST} \s/.+?\.php[\s?] [NC]
RewriteRule ^ - [F]
# send all non-file, non-dir requests to /Sub/Test.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.+$ /Sub/Test.php [L]