嘗試實作對 url 中 3-1 路徑的重寫,然后對 index.html 進行重寫。可以通過以下方式實作前者:
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^([^/] )/([^/] )/([^/] )?$ /index.php?a=$1&b=$2&c=$3 [L,QSA,NC]
RewriteRule ^([^/] )/([^/] )?$ /index.php?a=$1&b=$2 [L,QSA,NC]
RewriteRule ^([^/] )?$ /index.php?a=$1 [L,QSA,NC]
想要在此之后添加從索引(例如“www.domain.com”)到 /index.php?a=10 的重寫,但無法完成這項作業。
uj5u.com熱心網友回復:
RewriteRule ^([^/] )?$ /index.php?a=$1 [L,QSA,NC]
“問題”是最后一條規則也匹配一個空的 URL 路徑,因此請求被重寫,/index.php?a=并且任何與根匹配的后續規則都不會被處理。
您可以在現有規則之前添加它以避免沖突,而不是在現有規則“之后”撰寫規則以匹配根。例如:
RewriteRule ^$ /index.php?a=10 [QSA,L]
: other rules follow...
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC] RewriteRule ^([^/] )/([^/] )/([^/] )?$ /index.php?a=$1&b=$2&c=$3 [L,QSA,NC] RewriteRule ^([^/] )/([^/] )?$ /index.php?a=$1&b=$2 [L,QSA,NC] RewriteRule ^([^/] )?$ /index.php?a=$1 [L,QSA,NC]
請注意,該RewriteCond指令僅適用于第一個RewriteRule指令。你需要這個嗎?
您的規則有點模棱兩可,因為在每個正則運算式中,您都允許最后一個路徑段是可選的。這基本上意味著尾部斜杠是可選的(例如,根據這些規則/foo/bar/,它們都是有效的 URL)。/foo/bar如果您沒有在最后一個規則中使路徑段成為可選,那么您可以將您的規則放置在最后一個匹配根的位置,就像您最初想要做的那樣。
請求/foo/bar/baz匹配第一條規則。/foo/bar/(帶有尾部斜杠)也匹配第一條規則,但/foo/bar(沒有尾部斜杠)匹配第二條規則。同樣,/foo/也匹配第二條規則,但/foo匹配第三條規則。并且(遵循相同的模式)第三條規則也匹配/(因此您的初始問題)。我的觀點是……每條規則的最后一個路徑段是否應該是可選的?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456602.html
