.htaccess 尝试停止mydomain.com/index.php/garbage-after-slash等URL

.htaccess 尝试停止mydomain.com/index.php/garbage-after-slash等URL,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我对.htaccess文件和mod重写规则知之甚少。今天查看我的statcounter信息,我注意到我网站的访问者输入了一个url,如下所示: http://mywebsite.com/index.php/contact-us 由于网站上没有这样的文件夹或文件,网站上也没有断开的链接,我认为这是一次渗透尝试。向访问者显示的是index.php文件的输出,但没有相关CSS布局的好处 我需要创建一个重写规则,它要么删除index.php(或任何.php文件)之后的信息,要么更恰当地说,插入一个问号

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

http://mywebsite.com/index.php/contact-us
由于网站上没有这样的文件夹或文件,网站上也没有断开的链接,我认为这是一次渗透尝试。向访问者显示的是index.php文件的输出,但没有相关CSS布局的好处

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


感谢您的帮助。

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

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

我找到了一个解决方案,使用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文件通常会忽略该字符串).

您的
.htaccess
文件中现在有什么?我现在没有.htaccess文件-在我开始调查这个问题之前,我并不知道这一点。如果我想让它更通用,以便任何.php文件都具有相同的功能?放在它之后,我需要如何修改搜索条件?现在,它看起来是特定于索引的。php@user1609659我们只是想抓住那些故意调整你的URL的人,看看你的网站是如何工作的。好的,我明白你的意思,再次感谢你的帮助。我创建了一个包含您提供的代码的.htaccess文件,但没有任何效果(后面的/和后面的垃圾仍然存在,页面呈现时没有CSS)。也许我需要清理浏览器上的缓存,所以我也会尝试一下。在StackOverflow上有没有一种方法可以在不考虑解决方案的情况下说声谢谢?您的帖子可能会在屏幕右侧显示正确的“类似问题”,这些问题最终会让我找到一个解决方案。@user1609659如果您找到了解决方案(或者由于某种原因,这个解决方案不起作用),那么您可以发布自己的答案并将其标记为已回答。如果你在另一个问题中找到了确切的答案,那么删除这个问题,因为它是重复的。然后投票选出你所选问题的答案。UPPOINT表示一个潜在的正确(或有用)的答案,因为有些问题可以用不止一种方法来回答。如果你把答案标记为答案,那么这个人得到更多的答案分数(但你只能作为问题的原始海报来做)。