一切都在 httpd.conf 內完成,沒有 .htaccess
我有兩個簡單的條件。如果 url 中有字串“talis”直接指向一個檔案,否則指向另一個檔案。
RewriteRule talis talis.php [L]
RewriteRule . index.php [L]
這件作品按預期作業 [域]/t/1/talis/s 轉到 talis.php [域]/t/1/bob/s 轉到 index.php
但是當我嘗試在那里輸入數字時,它總是默認為最后一條規則
RewriteRule talis01 talis.php [L]
RewriteRule . index.php [L]
(注意 talis 01)
這將始終轉到第二個條件。
[域]/t/1/talis01/s 轉到index.php
[域]/t/1/bob/s 轉到 index.php
uj5u.com熱心網友回復:
由于您使用的是相對替換字串,因此我假設它們位于目錄背景關系(可能.htaccess)中,而不是服務器(或虛擬主機)背景關系中。第二條規則模式中的點也用于目錄背景關系。
mod_rewrite 不是“忽略數字”。該請求被talis.php第一個規則重寫,但隨后talis.php被第二個規則重寫為index.php。
更詳細...
RewriteRule talis talis.php [L] RewriteRule . index.php [L]
在第一個示例中,包含的請求talis被重寫,talis.php并且該L標志使重寫引擎重新開始。在第二遍talis.php也匹配相同的規則并talis.php再次重寫。由于 URL 未更改,處理停止并talis.php接受請求。
如果不是因為第一條規則也匹配talis.php(第一條規則重寫的 URL),那么這也會導致請求被重寫為index.php.
RewriteRule talis01 talis.php [L] RewriteRule . index.php [L]
在第二個示例中,包含的請求talis01首先被重寫,talis.php并且該L標志使重寫引擎重新開始。talis.php不匹配第一個規則,但它匹配第二個規則,因此請求被第二次重寫為index.php。該L標志使重寫引擎重新開始。第二條規則(再次)匹配,URL 未更改,因此處理停止并index.php接受請求。
假設您使用的是 Apache 2.4,那么最簡單的解決方案是END在第一條規則上使用標志,而不是L. 這會停止重寫引擎的所有處理并防止另一個回圈。
例如:
RewriteRule talis01 talis.php [END]
RewriteRule . index.php [L]
雖然,通常您會使用更嚴格的正則運算式和/或條件來確保重寫的請求不會被任何指令重新匹配(如果這不是意圖)。例如。看到沒有任何條件的第二條規則是不尋常的,因為這實際上將所有內容重寫為index.php,包括對index.php自身的請求。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/373148.html
