RewriteRule禁止空Request Request

时间:2013-12-16 22:50:13

标签: php apache .htaccess mod-rewrite

我正在尝试编写.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]

如何让它按预期工作?

2 个答案:

答案 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]