2013-06-24 50 views
1

我總是使用下一個:重寫規則的多個文件名

RewriteRule ^(.*)/$ page.php?name=category&type=$1 [L] 

重寫我的鏈接。我只使用了一個文件名「page.php」,它工作。 今天,我要添加另一個文件「project.php」,並需要另一個重寫規則吧,這就是我想在.htaccess使用全碼:

Options +FollowSymlinks 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php [L] 

RewriteRule ^(.*)/$ page.php?name=category&type=$1 [L] 
RewriteRule ^(.*)/(.*)/(.*)/(.*)/$ project.php?category=$1&id=$4&type=$2&name=$3 [L] 

但是,這只是工作第一條路,第二條。請,任何人都可以幫忙弄清楚嗎?我試圖搜索它一段時間,但找不到解決方案。提前謝謝了!

+0

我們可以得到一個網址的例子嗎? page.php和project.php都是。 –

+0

謝謝你的回覆,喬納森。我現在不能提供實時鏈接,但是當我嘗試從第二個鏈接獲取「類別」時: project.php?category = $ 1&id = $ 4&type = $ 2&name = $ 3(鏈接轉換後) 它將它們全部放在一起,包括「id」,「type」等等,以斜線表示;例如一/二/三 – dnns

+1

是的,我明白了。我不需要實際的實時鏈接,我只是想知道鏈接大概是什麼樣子。我已經可以告訴你的問題是'(。*)'表示「零個或多個任何字符」。這將包括'/'。所以所有的URL都會匹配'。*'使第一條規則總是成立。之後重寫停止。你應該更好地識別哪些類型的字符(僅限數字,僅限字母,兩者......等)應該在每個組中(括號之間)並匹配。 –

回答

1

喬納森庫恩說(.*)閱讀所有的字符,以便把project.php rule第一和使用至少([^/]+)代替(.*)在該規則。 ([^/]+)閱讀除/以外的一個或多個字符。