与htaccess多重写规则的麻烦

我有一个以下的标准

如果查询string与Microwave_Ovens文本相匹配,则需要在Request URI中用Microwave-Ovens (用连字符replace下划线)replace。

它按照下面提到的第一组3行的预期工作。 我其实也需要做一些其他types(假设Vacuum_Cleaners )也是一样的。 我添加了第二组3行,但它不工作。 无论我首先指定的只是工作。

我的重写条件和规则如下:

 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] 

任何人都可以请build议我在这里做错了什么

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

你的规则看起来比你在这个问题上所做的更多吗? 但是这里的主要问题似乎是第二个RewriteRule指令。 前面的RewriteCond指令只适用于第一个RewriteRule指令。 所以,第二个RewriteRule将无条件地运行,并捕获可能包含Vacuum_Cleaners任何请求。

既然你已经在第二个规则块中重复了这个指令,那么也许简单地删除第一个就足够了。 例如:

 # 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]