我已經建立了一個簡單的.htaccess文件直接請求如下樣本index.php文件:[L]標記如何導致我的網址部分重複?
RewriteEngine On
RewriteRule ^foo/(.*)$ bar/$1 # [L] here changes output
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?request=$1
訪問devserver.com/foo/baz
導致的bar/baz/baz
一個$_GET['request']
。將[L]
標誌添加到第一個RewriteRule
給我的預期結果bar/baz
。
我讀過很多人誤解[L]旗的問題/答案,認爲它會結束所有重寫。我知道情況並非如此,也沒有看到[L]國旗應該如何真正在這裏有所作爲。
下面是我設想發生在這裏,第一沒有[L]步驟:
- 請求URL開始爲
foo/baz
- 要求第一條規則相匹配,則改寫爲
bar/baz
- 請求繼續處理和火柴
RewriteCond
- 請求匹配下一條規則,並重寫爲
index.php?request=bar/baz
- 新的迭代開始與
index.php?request=bar/baz
要求 - 新的請求沒有匹配的規則,並最終輸出
,然後用[L]:
- 請求URL開始爲
foo/baz
- 要求第一條規則相匹配,則改寫到
bar/baz
- 新的迭代開始請求
bar/baz
- 請求做esn't比賽直到
RewriteCond
- 請求下一條規則相匹配,則改寫爲
index.php?request=bar/baz
- 新迭代與
index.php?request=bar/baz
- 新的請求的請求開始沒有匹配的規則,並最終輸出
在這簡化的情況下,我無法理解baz
如何得到重複。我誤解了什麼?
編輯:在第一個RewriteRule下面添加這個結果導致的最後test/baz
。不知道這意味着什麼:
RewriteCond %{REQUEST_URI} ^/foo/baz$
RewriteRule ^bar/baz/baz$ /test
所以我們都知道'[L]'停止處理更多的規則。由於您的第一次重定向是相對URL,因此可能會出現此問題。你有沒有做過任何其他測試? –
我同意** Rob W **,這很可能是因爲重定向和因此重新處理'/ bar/baz'導致的結果 –
@RobW,我一直在嘗試圍繞這個測試半天,沒有這實際上已經讓人們對真正發生的事情有了更多的瞭解。這是純粹的版本。儘管如此,我仍會編輯一個問題。我不確定相對URL如何改變,因爲/ bar *仍然不能匹配任何內容。 – rotanimod