我们在日志中看到一些非常奇怪的网址,并且我被告知要开始重定向它们。 我知道有几种更好的方法可以解决这个问题,但老板希望这样做。我提前道歉。
我们在日志中看到如下内容:
我被告知要在.htaccess文件中“删除一些mod_rewrite规则”来取消并删除所有ob,rpp和ppg变量。
现在,我已经找到了解决所有问题的方法。如果我可以将/ foo / bar / bla留在那里,那也不会太糟糕。但我似乎无法做到这一点。基本上,任何帮助将不胜感激。
答案 0 :(得分:0)
尝试:
# 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]
这里的问题是您的网址:
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中有 A LOT 的ob =,rpp =和ppg =。超过10.这意味着如果您对该URL使用这些规则,您将收到500内部服务器错误。默认情况下,apache的内部递归限制设置为10,这意味着如果它需要循环超过10次(并且它将用于上面的URL),它将保释并返回500.您需要设置更高:
LimitInternalRecursion 30
或其他一些理智的号码。不幸的是,您不能在htaccess文件中使用该指令,您需要进入服务器或vhost配置并进行设置。