這兩條規則被混淆了:
RewriteRule ^health-institute-([a-zA-Z\-] )-([a-zA-Z\-] )$ search.php?city=$1&speciality=$2 [L]
RewriteRule ^health-institute-app-([a-zA-Z\-] )$ search.php?city=$1 [L]
當我想達到health-institute-app-mycity(第二條規則)時,服務器將其app視為一個值并嘗試達到search.php?city=app&speciality=mycity(第一條規則)
我怎么能說這是兩個獨立的規則?
uj5u.com熱心網友回復:
是的,因為^health-institute-([a-zA-Z\-] )-([a-zA-Z\-] )$第一條規則中的正則運算式也匹配health-institute-app-mycity.
您需要顛倒這兩個指令,因此更具體的規則是第一位的。
例如:
RewriteRule ^health-institute-app-([a-zA-Z-] )$ search.php?city=$1 [L]
RewriteRule ^health-institute-([a-zA-Z-] )-([a-zA-Z-] )$ search.php?city=$1&speciality=$2 [L]
(在字符類的開頭或結尾時無需反斜杠轉義連字符。)
更新:然而,(現在)第二條規則中的正則運算式可能不明確,因為連字符 ( -) 用于分隔兩個值 ( cityand speciality),但連字符也包含在兩個字符類中,因此它可能是一部分價值觀本身。但是,盡管正則運算式似乎允許這樣做,但兩者city 和 speciality不能都包含連字符。
例如,應該如何health-institute-foo-bar-baz-qux解決請求?由于量詞 是貪婪的,這當前將導致search.php?city=foo-bar-baz&speciality=qux. 如果在speciality(正如正則運算式所建議的那樣)中存在連字符,它將永遠不會匹配。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/364290.html
