簡體   English   中英

mod_rewrite和斜杠

[英]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/worthlessdata123domain.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM