1

ログに非常に奇妙な 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

これを取得して、ob、rpp、および ppg 変数をすべて削除するには、「.htaccess ファイルに mod_rewrite ルールをいくつか追加する」ように言われました。

今、私はすべてを取り除く方法を見つけました。/foo/bar/bla をそのままにしておくことができたとしても、それほど悪くはありません。しかし、私はそれを行うことができないようです。基本的に、どんな助けでも大歓迎です。

4

1 に答える 1

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]

ここでの問題は、あなたの 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 ファイルでそのディレクティブを使用することはできません。サーバーまたは仮想ホストの構成に移動して設定する必要があります。

于 2012-09-28T21:57:40.540 に答える