试图阻止诸如mydomain.com/index.php/garbage-after-slash之类的网址

时间:2013-08-07 02:55:31

标签: .htaccess mod-rewrite

我对.htaccess文件和mod-rewrite规则知之甚少。今天查看我的statcounter信息,我注意到我网站的访问者输入了如下网址:

http://mywebsite.com/index.php/contact-us

由于网站上没有这样的文件夹或文件,并且网站上没有断开的链接,我假设这是一次渗透尝试。向访问者显示的是index.php文件的输出,但没有相关CSS布局的好处。

我需要创建一个重写规则,它将删除index.php(或任何.php文件)之后的信息,或者更合适的是,插入问号(在.php文件名之后),以便任何以下垃圾将被视为参数(如果不需要参数,将被优雅地忽略)。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果您只期望存在真实目录和真实文件,则可以将其添加到.htaccess文件中。它的作用是它需要一个不存在的文件或目录请求,并为用户提供index.php页面,其中原始请求作为查询字符串。 [QSA]附加任何现有的查询字符串。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?$1 [PT,QSA]    

答案 1 :(得分:0)

我找到了一个解决方案,使用AbsoluteZero提供的信息以及随着解决方案的推出而在屏幕右侧弹出的其他线程。

这是适合我的代码......

Options -Multiviews -Indexes +FollowSymLinks
RewriteEngine On
RewriteBase /
DirectorySlash Off

# remove trailing slash
RewriteRule ^(.*)\/(\?.*)?$ $1$2 [R=301,L]

# translate PATH_INFO information into a parameter
RewriteRule ^(.*)\.php(\/)(.*) $1.php?$3 [R=301,L]

# rewrite /dir/file?query to /dir/file.php?query
RewriteRule ^([\w\/-]+)(\?.*)?$ $1.php$2 [L,T=application/x-httpd-php]

我从StackOverflow上的另一篇文章中删除了尾部斜杠。但是,即使在删除尾部斜杠之后,重写规则也没有考虑到在.php文件之后附加看起来有效信息的人

(例如:mysite.com/index.php/somethingelse)

我的目标是删除“/ somethingelse”,或者使其无害。 PATH_INFO规则在.php文件之后找到一个“/”,并将从该点开始的所有其他内容转换为查询字符串(通常由PHP文件忽略)。