私は以下の基準を持っています
クエリ文字列が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]
誰かが私がここで間違っていることを私に提案できますか
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]