我有以下标准
如果查询字符串与Microwave_Ovens
文本匹配,我需要Microwave-Ovens
在请求 URI 中替换(用连字符替换下划线)。
对于下面提到的第一组 3 行,它按预期工作。实际上,我需要对其他类型(假设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]
谁能告诉我我在这里做错了什么?
答案1
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]