web-dev-qa-db-ja.com

htaccessの複数の書き換えルールの問題

私は以下の基準を持っています

クエリ文字列がMicrowave_Ovensテキストと一致する場合、リクエストURIでMicrowave-Ovens(アンダースコアをハイフンに置き換えます)に置き換える必要があります。

下記の3行の最初のセットでは期待どおりに機能しています。私は実際に他のタイプ(Vacuum_Cleanersと仮定)についても同じことをする必要があります。 3行の2番目のセットを追加しましたが、機能していません。私が最初に指定したものはすべて機能しているだけです。

私の書き換え条件とルールは次のとおりです。

RewriteCond %{QUERY_STRING} ^(.*)Microwave_Ovens(.*)$
RewriteRule ^([^_]*)_+([^_]*)$ /Mr10q/$1-$2?%1Microwave-Ovens%2 [R=301,L]
RewriteRule ^([^_]*)_+(.*)$ $1-$2 [N,DPI]

RewriteCond %{QUERY_STRING} ^(.*)Vacuum_Cleaners(.*)$
RewriteRule ^([^_]*)_+([^_]*)$ /Mr10q/$1-$2?%1Vacuum-Cleaners%2 [R=301,L]
RewriteRule ^([^_]*)_+(.*)$ $1-$2 [N,DPI]

誰かが私がここで間違っていることを私に提案できますか

1
Sri
RewriteCond %{QUERY_STRING} ^(.*)Microwave_Ovens(.*)$
RewriteRule ^([^_]*)_+([^_]*)$ /Mr10q/$1-$2?%1Microwave-Ovens%2 [R=301,L]
RewriteRule ^([^_]*)_+(.*)$ $1-$2 [N,DPI]

あなたのルールはあなたが質問で述べたよりもはるかに多くのことをしているように見えますか?しかし、ここでの主な問題は、2番目のRewriteRuleディレクティブのようです。上記のRewriteCondディレクティブは、最初のRewriteRuleディレクティブにのみ適用されます。したがって、2番目のRewriteRuleは無条件に実行され、Vacuum_Cleanersを含む可能性のあるすべてのリクエストをキャッチします。

このディレクティブを2番目のルールブロックで複製したので、最初のディレクティブを削除するだけで十分かもしれません。例えば:

# 1
RewriteCond %{QUERY_STRING} ^(.*)Microwave_Ovens(.*)$
RewriteRule ^([^_]*)_+([^_]*)$ /Mr10q/$1-$2?%1Microwave-Ovens%2 [R=301,L]

# 2
RewriteCond %{QUERY_STRING} ^(.*)Vacuum_Cleaners(.*)$
RewriteRule ^([^_]*)_+([^_]*)$ /Mr10q/$1-$2?%1Vacuum-Cleaners%2 [R=301,L]

# 3
RewriteRule ^([^_]*)_+(.*)$ $1-$2 [N,DPI]
0
MrWhite