.htaccess 使用mod_rewrite去除垃圾

.htaccess 使用mod_rewrite去除垃圾,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我们在日志中看到一些非常奇怪的URL,我被告知要开始重定向它们。 我知道有几种更好的方法来解决这个问题,但老板希望这样做。我事先道歉 我们在日志中看到如下内容: 我被告知“在.htaccess文件中抛出一些mod_重写规则”来删除所有ob、rpp和ppg变量 现在,我找到了把所有东西都去掉的方法。如果我能把/foo/bar/bla放在那里,那也不会太糟糕。但我似乎不能那样做。基本上,任何帮助都将不胜感激。试试: # strip out any params that's ob=, rpp= or

我们在日志中看到一些非常奇怪的URL,我被告知要开始重定向它们。 我知道有几种更好的方法来解决这个问题,但老板希望这样做。我事先道歉

我们在日志中看到如下内容:

我被告知“在.htaccess文件中抛出一些mod_重写规则”来删除所有ob、rpp和ppg变量

现在,我找到了把所有东西都去掉的方法。如果我能把/foo/bar/bla放在那里,那也不会太糟糕。但我似乎不能那样做。基本上,任何帮助都将不胜感激。

试试:

# strip out any params that's ob=, rpp= or ppg=
RewriteRule ^/?(.*)&ob=([^&]*)&(.*)$ /$1&$3 [L]
RewriteRule ^/?(.*)&rpp=([^&]*)&(.*)$ /$1&$3 [L]
RewriteRule ^/?(.*)&ppg=([^&]*)&(.*)$ /$1&$3 [L]

# if everything's gone, finally redirect and fix query string
RewriteCond %{REQUEST_URI} !&(ob|rpp|ppg)
RewriteRule ^/?(.*?)&(.*) /$1?$2 [L,R=301]
这里的问题是您的URL:

http://www.example.com/foo/bar/bla&ob=&ppg=&rpp=100&ob=&rpp=&ppg=&rpp=30&ppg=&ppg=1&rpp=10&rpp=50&ob=&ob=&ob=&rpp=40&ob=&rpp=5&rpp=30&rpp=&rpp=20&order_by=&results_per_pge=75

在URI中有很多ob=、rpp=、和ppg=。超过10个。这意味着,如果对该URL使用这些规则,将出现500个内部服务器错误。默认情况下,apache将内部递归限制设置为10,这意味着如果它需要循环10次以上,并且对于上面的URL,它将退出并返回500。您需要将其设置得更高:

LimitInternalRecursion 30

或者其他一些理智的数字。不幸的是,您不能在htaccess文件中使用该指令,您需要进入服务器或vhost配置并进行设置。

该URL应该以http://www.example.com/foo/bar/bla&ob=&ppg 或http://www.example.com/foo/bar/bla?ob=&ppg 查询字符串?不幸的是,它是一个格式错误的查询字符串,任何地方都没有问号。