0

私はapacheの書き換えルールを初めて使用します。URLを書き直そうとしています

例:

http://www.example.com/try/this/all+letters+with+plus- > http://www.example.com/try/this/allletterswithplus

したがって、要件は、/ try /thisと+記号を除く残りのURLを含むURLにリダイレクトする必要があることです。注意すべき点として、プラス記号の数は固定されていません。2〜7個の場合もあれば、それ以上のプラス記号の場合もあります。all + Letters + with + plusテキストには数字からアルファベットまで何でも含めることができますが、記号は含まないため、正規表現を使用したオプションが適していることが望ましいです。

いくつかの組み合わせを試しましたが、再帰ループに入りました。

どんな助けでも大歓迎です。

4

1 に答える 1

1

これは、mod_rewriteを使用して2つのステップで実行できます。最初のステップは、以降のすべての「+」を削除することです/try/this/。次に、2番目のステップは、リクエストに元々「+」が含まれていたが、現在のURIには含まれていないかどうかを確認することです。

このルールは、「+」記号がなくなるまで削除し続けます。しかし、これはリライトエンジンを通過しているだけです。

RewriteRule ^try/this/(.*)\+(.*)$ /try/this/$1$2 [PT]

このルールは、元のリクエストに「+」が含まれるURLが含まれているかどうかを確認し、含まれている場合は、それらがすべて削除されているかどうかを確認します。その場合は、すべての書き換えを終了し、ブラウザをリダイレクトします。

RewriteCond %{THE_REQUEST} \ /try/this/.*\+.*\ HTTP
RewriteRule ^try/this/([^\+]*)$ /try/this/$1 [R,L]

「+」記号なしで/try/ this/URLにリダイレクトしたいとおっしゃいました。ただし、ブラウザをリダイレクトせずに内部で書き直したい場合は、2番目の部分は必要ありません。最初のルールだけで、それらが削除されます。

于 2011-11-11T05:55:48.103 に答える