1

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

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

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

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

感谢您提供任何帮助。

4

2 回答 2

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 文件忽略)。

于 2013-08-08T05:12:35.220 回答
0

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

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?$1 [PT,QSA]    
于 2013-08-07T03:08:17.373 回答