Php
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]
誰能建議我在這裡做錯了什麼
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]