2013-10-31 92 views
1

我正在創建一個新的網站,它有一些PHP中。該網站基本上會這樣工作,我有/index.php?page=category_page。類別是類別,頁面是排序 - 子類別/實際頁面。重寫的規則將如下所示:/ category/page。mod_rewrite RewriteRule和html鏈接

我有這樣的:

RewriteEngine On 
RewriteRule ^category/([^/]*)$ index.php?page=$1 [L] 

但我不知道怎麼類別和頁面,任何幫助分開? 第二件事是,在我的index.php(例如)我從一個外部文件中一些CSS:

<link rel="stylesheet" type="text/css" href="style/style.css"/> 

這不會重寫規則的工作,因爲它會嘗試加載/分類/頁/style/style.css不存在/不重寫。我如何使它工作?我知道一個簡單的解決方法是將/style/style.css放入網站的根目錄,但我目前正在從一個子目錄運行網站,例如example.com/new/index.php所以這不是一個選項。任何幫助?

+0

對於第二件事添加一個尾隨斜線到您的路徑:'/風格/ style.css' – TiMESPLiNTER

回答

3

問題1:

你可以在你的正則表達式,例如定義多個參數類別&頁面(見下文)。但是,如果使用這樣寬泛的重寫規則,您可能希望添加一個條件,以避免重寫樣式表,圖像和其他資產。

我還修改了你的模式,只匹配字母,數字,連字符和下劃線,這將防止在你的類別或頁面名稱中使用非標準字符。

RewriteEngine On 
RewriteCond %{REQUEST_URI} !\.(js|css|png|gif|jpg)$ [NC] 
RewriteRule ^([\w\d\-]+)/([\w\d\-]+)/?$ index.php?category=$1&page=$2 [L] 

問題2:

你在href,這是附加樣式表的位置,在你的瀏覽器(/分類/網頁/)中定義的當前位置使用的是相對URL。

即使服務器端正在重寫該URL,瀏覽器也不知道重寫。

如果使用絕對URL,瀏覽器將定義相對於BASE URL(/)的URL。

試試這個:

<link rel="stylesheet" type="text/css" href="/style/style.css"/> 
+0

是'([^/] *)'在這種情況下是正確的?斜線之前/之後是否應該至少有一個字符? '*'是'0或更多' – TiMESPLiNTER

+0

好點,時間。更新爲+ –

+0

注意,並非每個共享主機都支持字符組\ w和\ d。因此,如果重寫規則不起作用,請嘗試使用本地組[A-Za-z0-9] – TiMESPLiNTER

1

使用此重寫規則

RewriteEngine On 
RewriteRule ^(.+)/(.+)/$ index.php?page=$1_$2 [L]