2012-09-13 114 views
0

的mod_rewrite和結尾的斜槓

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

我已經掙扎了很多,但是我在正則表達式上很糟糕,而且我的頭不能正常工作。

回答

3

您擁有的規則應該足以滿足第一個條件。如果有人前往domain.com/sample_text/,則URI sample_text/匹配,並且應在瀏覽器的URL地址欄保持不變的情況下獲得內容/page.php?text=sample_text

對於第二個條件,你需要添加一個規則來處理:

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,則URI基礎爲/,但是當瀏覽器看到http://domain.com/sample_text/時,URI基礎將變爲/sample_text/,我猜測這並不是其中的一個地方。

您可以通過在你的頁面的標題基本解決這個問題:

<base href="/"> 
+1

我只是輸入相同的東西... – jeroen

+0

輝煌!謝謝 :) – Mattis

1

您需要使用您的資產(JS,圖片等)

絕對路徑要解決的第一個問題

對於第二個問題,您需要@Jon Lin的解決方案。