2011-08-30 102 views
0

我已經在.htaccess阿帕奇國防部重寫

RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ page.php?name=$1&do=$2&newstitle=$3 [L] 
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ page.php?name=$1&do=$2&cattitle=$3 [L] 

設置2條規則,這就是我所說的網址:

​​

和不國防部重寫:

www.domain.com/page.php?name=My-Page&do=news&newstitle=News-Title 
www.domain.com/page.php?name=My-Page&do=category&cattitle=Category-Title 

現在問題是因爲兩條規則都是相似的,無論如何,它總是迴歸到第一條規則。如果我刪除第一條規則,第二條URL可以正常工作,但是它們都會重寫第一條規則。

如何在兩條規則都能正常工作的情況下實現此目的。我知道我錯過了一些東西,但是在涉及到mod_rewrite時,我的專業知識是有限的。

任何幫助,非常感謝。

回答

0

這兩個規則都不相似,它們是相同的,所以它總是會做第一個。

如果我要做到這一點(我真的不會,主要是因爲我覺得這是對MVC模式的工廠工作更好的保留),我可能會這樣說:

RewriteRule ^([^/]*)/news/([^/]*)\.html$ page.php?name=$1&do=news&newstitle=$2 [L] 
RewriteRule ^([^/]*)/category/([^/]*)\.html$ page.php?name=$1&do=category&cattitle=$2 [L] 

你需要一些方法來區分它們。這應該很簡單。

編輯

只是想指出,你可以寫這些:

RewriteRule ^(.+)/news/(.+)\.html$ page.php?name=$1&do=news&newstitle=$2 [L] 

我添加的偏好是去除.html

RewriteRule ^(.+)/news/(.+)$ page.php?name=$1&do=news&newstitle=$2 [L] 

我不喜歡暴露服務器技術,而HTML並沒有增加任何我們不瞭解的網站。

就個人而言,我使用了類似的系統:

RewriteRule ^(.*)$ index.php?page=$1 [L,QSA] 

網址是由黑客攻擊的index.php分開,到像格式:

http://www.example.com/<controller>/<arg1>/<arg2> 

這樣,一個重寫聲明我告訴它去哪裏,並且控制器返回適當的輸出。之後我再也不需要更新.htaccess。如果我需要新的功能,我寫一個新的控制器。只是要看看。

+0

非常感謝你,現在一切都很合理。 – Mike

相關問題