我对.htaccess
文件和mod-rewrite规则知之甚少。今天查看我的statcounter信息,我注意到我网站的访问者输入了如下网址:
http://mywebsite.com/index.php/contact-us
由于网站上没有这样的文件夹或文件,并且网站上没有断开的链接,我假设这是一次渗透尝试。向访问者显示的是index.php文件的输出,但没有相关CSS布局的好处。
我需要创建一个重写规则,它将删除index.php
(或任何.php文件)之后的信息,或者更合适的是,插入问号(在.php文件名之后),以便任何以下垃圾将被视为参数(如果不需要参数,将被优雅地忽略)。
感谢您的帮助。
答案 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文件忽略)。