重写子目录中的PHP文件

时间:2016-08-11 12:44:07

标签: php .htaccess mod-rewrite

我的.htaccess文件中有以下代码来阻止对PHP文件的请求并显示404.php文件。

RewriteCond %{REQUEST_URI} !(index|backup).php
RewriteCond %{REQUEST_URI} !^\/(dir1|dir1)\/
RewriteCond %{REQUEST_URI} !404.php
RewriteCond %{REQUEST_URI} .*\.php
RewriteRule .* 404.php [L]

这会阻止对所有PHP文件的请求,但index.php,backup.php以及dir1和dir2中的所有文件除外。这适用于根目录的请求:

http://www.example.com/some-file.php
http://www.example.com/another-file.php

但它不适用于子目录中的文件:

http://www.example.com/sub/some-file.php
http://www.example.com/sub/another-file.php

我应该说子目录'sub'实际上并不存在。这些请求来自自动扫描仪,希望在网站上找到漏洞。我正在重写对404.php的请求,因为此文件不加载数据库或任何应用程序。如果我不这样做,则会加载完整的应用程序404,这会导致MySQL崩溃,因为我每分钟得到100个这样的请求(一天几次)。

我的问题是如何修改代码以适用于子目录?我认为REQUEST_URI包含了完整的子目录,所以代码应该按原样工作?

1 个答案:

答案 0 :(得分:-1)

你可以有一个单独的重写,只是拒绝访问sub,把它放在你的其他规则之前,它只会403请求并停止处理:

RewriteCond %{REQUEST_URI} ^/(sub.*|othersub.*)$ 
RewriteRule .* - [F]

我会保留一个单独的列表来拒绝,因为钓到漏洞的人属于403类别,而寻找潜在有效网址的真正错误更多的是404.