htaccess 多重写规则问题

htaccess 多重写规则问题

我有以下标准

如果查询字符串与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]

相关内容