[英]mod_rewrite and trailing slashes
我有
RewriteRule ^([A-Za-z0-9-_≈]+)/?$ page.php?text=$1
可以將domain.com/sample_text
匹配項轉換為page.php?text=sample_text
但是,我希望以下兩個條件也能起作用(並給出相同的結果)。
1)如果他們轉到domain.com/sample_text/
我想在地址欄中保留斜杠並顯示page.php?text=sample_text
(現在轉到正確的頁面,但是CSS和JS路徑被弄亂了)。
2)如果他們轉到domain.com/sample_text/worthlessdata123
我想刪除/之后的所有內容,並將domain.com/sample_text/
保留在地址欄中,並顯示page.php?text=sample_text
。
我已經掙扎了很多,但是我對正則表達式很不滿意,而且我的頭工作不正常。
您擁有的規則應足以滿足第一個條件。 如果有人訪問domain.com/sample_text/
,則URI sample_text/
匹配,並且應該在/page.php?text=sample_text
處獲取內容,而瀏覽器的URL地址欄保持不變。
對於第二種情況,您需要添加一條規則來處理:
RewriteRule ^([A-Za-z0-9-_≈]+)/.+$ /$1/ [L,R=301]
這將重定向: domain.com/sample_text/worthlessdata123
到domain.com/sample_text/
,然后第一個規則應該從那里開始。
誤讀了您的第一個問題。 由於額外的斜杠,頁面內容中的相對/絕對路徑的基准有所不同。 當您具有類似<img src="images/blah.gif">
,相對基數是從瀏覽器看到的URL派生的(不是服務器內部重寫的內容)。 因此,如果瀏覽器看到: http://domain.com/sample_text
: http://domain.com/sample_text
,則URI基為/
,但是當瀏覽器看到http://domain.com/sample_text/
,URI基為/sample_text/
,即猜測並不是glike images/blah.gif
所在的地方。
您可以通過在頁面標題中添加基本內容來解決此問題:
<base href="/">
您需要通過為資產(JS,圖像等)使用絕對路徑來解決的第一個問題
對於第二個問題,您需要@Jon Lin的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.