Php

htaccess 多個重寫規則的問題

  • April 7, 2020

我有以下標準

如果查詢字元串與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]

引用自:https://serverfault.com/questions/845587