2008-11-24 32 views
5

在這個話題上似乎沒有太多的信息,所以我要概述一下我的具體問題,然後我們可以將問題和答案轉化爲更具普遍性的東西。Mod-rewrite Trailing Slash問題

我有這樣的重寫規則

RewriteEngine On 
RewriteBase /bookkeepers/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)/?$ index.php?franchise=$1 

這是改變這個URL

http://example.com/location/kings-lynn 

進入這一個

http://example.com/location/index.php?franchise=kings-lynn 

我遇到的問題是,如果我添加尾隨斜線

http://example.com/location/kings-lynn/ 

那麼查詢字符串返回

franchise=kings-lynn/ 

並沒有我的CSS和JavaScript文件某種原因被加載。

任何想法?

+0

我發佈了關於正則表達式匹配的答案。要解決CSS/Javascript問題,您應該查看服務器日誌以查看要求的內容。您可能需要爲該RewriteRule添加一個[R,L],但我從未理解該部分。 – 2008-11-24 17:47:42

回答

10

正如@ Paul Tomblin所說的,。+正在貪婪;也就是說,它儘可能地匹配。

^(.+[^/])/?$告訴它匹配任何東西,然後是一個不是/的字符,然後是一個可選的/。這具有不捕獲尾部/的效果。

您的CSS和Javascript不起作用的最可能的原因是您使用的是相對路徑,如src =「my.js」。當有斜線時,它看起來像一個目錄,所以你的瀏覽器會查找/location/kings-lynn/my.js。您可以簡單地通過使用絕對路徑來解決這個問題(例如/location/my.js)。

6

它看起來像(。+)正在被貪婪匹配。在這種情況下,您可以嘗試

RewriteRule ^(.+[^/])/?$ index.php?franchise=$1 

這可確保第一組(括號內)不以斜槓結尾。

+0

不錯。這固定了我的尾部斜槓問題(但不是缺少CSS問題)。 不要以爲你可以談論這種工作方式可以嗎? – Binarytales 2008-11-24 17:43:32