我们在日志中看到了一些非常奇怪的 URL,我被告知要开始重定向它们。我知道有几个更好的方法来解决这个问题,但老板希望这样做。我提前道歉。
我们在日志中看到如下内容:
有人告诉我“在 .htaccess 文件中添加一些 mod_rewrite 规则”,然后去掉所有的 ob、rpp 和 ppg 变量。
现在,我找到了剥离一切的方法。如果我可以将 /foo/bar/bla 留在其中,那也不会太糟糕。但我似乎无法做到这一点。基本上,任何帮助将不胜感激。
我们在日志中看到了一些非常奇怪的 URL,我被告知要开始重定向它们。我知道有几个更好的方法来解决这个问题,但老板希望这样做。我提前道歉。
我们在日志中看到如下内容:
有人告诉我“在 .htaccess 文件中添加一些 mod_rewrite 规则”,然后去掉所有的 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]
这里的问题是您的网址:
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 文件中使用该指令,您需要进入服务器或虚拟主机配置并进行设置。