2011-11-26 92 views
0

我有一個PHP網頁,其中創建網址,如:如下圖所示&符號在URL問題

RewriteRule vendors/(.+)/cat-(.+)/(.+)$ vendors.php?location=$1&category=$2&freetext=$3 [L] 
RewriteRule vendors/(.+)/cat-(.+)/(.+)/$ vendors.php?location=$1&category=$2&freetext=$3 [L] 

問題1

vendors/London City/cat-DJ & Entertainment/keywords 

其中我的.htaccess重定向是:在vendors.php文件,我只獲得「DJ;娛樂」類別。 &字符丟失。

問題2是:我的完整.htaccess文件如下所示... 6規則被定義。

RewriteRule vendors/(.+)/(.+)/$ vendors.php?location=$1&freetext=$2 [L] 
RewriteRule vendors/(.+)/(.+)$ vendors.php?location=$1&freetext=$2 [L] 
RewriteRule vendors/(.+)/cat-(.+)/$ vendors.php?location=$1&category=$2 [L] 
RewriteRule vendors/(.+)/cat-(.+)$ vendors.php?location=$1&category=$2 [L] 
RewriteRule vendors/(.+)/cat-(.+)/(.+)$ vendors.php?location=$1&category=$2&freetext=$3[L] 
RewriteRule vendors/(.+)/cat-(.+)/(.+)/$ vendors.php?location=$1&category=$2&freetext=$3[L] 

爲什麼URL 廠商/倫敦城市/ CAT-DJ &娛樂/關鍵字與規則3或4相匹配,並重定向到vendors.php?位置1 & = $類= $ 16?

是否.htaccess從上到下逐條處理規則?

我已經通過將規則5和6放在其他規則的頂部來解決問題。我做了正確的修復嗎?

回答

0

1.我不太喜歡在URL中使用空格和其他特殊字符的想法。我不知道是否有可能與您的網站,但不是這種URL

vendors/London City/cat-DJ & Entertainment/keywords 

的你應該有這樣一句:

vendors/london-city/cat-dj-and-entertainment/keywords 

對於這一點,當然,你將必須執行在您的數據庫中進行一些額外的轉換/查找,以將london-city返回到London Citydj-and-entertainment返回到DJ & Entertainment。這可以通過將這些「從 - 到」對存儲在數據庫中來完成。

2.無論如何 - 規則的順序事項。因此,您應該從更具體的規則開始,並最終制定更通用的規則。

此外 - (.+)模式是太寬泛,因爲它可以匹配hello以及hello/pink/kitten。爲確保您始終只抓取一個部分(/之間的一部分URL),請改爲使用([^/]+)模式 - 這將解決您的「概要2」中的某個方面。

因此,嘗試這些優化的規則(每個規則將URL使用和不使用斜線匹配):

RewriteRule ^vendors/([^/]+)/cat-([^/]+)/([^/]+)/?$ vendors.php?location=$1&category=$2&freetext=$3 [L] 
RewriteRule ^vendors/([^/]+)/cat-([^/]+)/?$ vendors.php?location=$1&category=$2 [L] 
RewriteRule ^vendors/([^/]+)/([^/]+)/?$ vendors.php?location=$1&freetext=$2 [L] 

而且我不和與號得「類」的值作爲 在URL中給出。我只得到了分號。什麼可以是 的原因?

我沒有Apache的框旁邊給我當前正在運行的,所以現在不能檢查,但嘗試添加下一個BNE標誌的L標誌(如[L,B]) - 其中一人應該有所幫助:

0

the docs

在這些規則的定義的順序是非常重要的 - 這是他們將在運行時應用的順序。

+0

確定,但關於prob2,我在每一個規則的末尾包括$,它最初不應該符合規則3,4。 此外,我沒有得到'分類'與網址中給出的&符號的值。我只得到了分號。可能是什麼原因? – qateam