2012-09-21 22 views
0

我一直在爲例如在線商店制定一個htaccess重定向指令。htaccess重定向 - 使用子文件夾作爲參數

產品顯示在product.php,在通過一個ID參數。

什麼我的目標是有

products/someValue/someID

地圖

product.php?param1=someValue&param2=someID

這是我到目前爲止的地方。這主要是有效的,但有幾件事情不是我想要的。我需要它基本上將products/後面的所有內容用正斜槓分隔開來,並將其中的每一個用作參數,而不管有多少個。另外,結尾的斜線是可選的 - 如果沒有包含,我的規則將拋出404。任何人都可以將我指向正確的方向嗎?

RewriteRule ^products/(.*)/(.*)/.*$ /product.php?param1=$1&param2=$2 
+0

這個網址看起來像是被重定向到了什麼時間? – Aust

+0

如果我訪問'products/1/2 /',它會解析爲'product.php?param1 = 1&param2 = 2'。這很好,但如果我將其更改爲'products/1/2/3 /',則會轉到'product.php?param1 = 1/2&param2 = 3'。無法弄清楚爲什麼,正則表達式不是我擅長的。 – jammypeach

回答

1

您目前的正則表達式是貪婪的。量詞默認爲貪婪。添加一個?使他們不合格。或者你可以改變你的正則表達式匹配任何東西,除了/無論這些應該工作:

RewriteRule ^products/(.*?)/(.*?)(/.*)?$ /product.php?param1=$1&param2=$2 
RewriteRule ^products/([^/]*)/([^/]*)(/.*)?$ /product.php?param1=$1&param2=$2 

Read up on greediness in regexes to understand this better.

+0

謝謝你,完美地完成了!我知道我很親密。鏈接也很棒,最終讓人感覺:)機器人和@ JonLin的答案可以做到這一點,這要歸功於你們倆 – jammypeach

+0

@jammypeach - 不客氣。 :)順便說一下,在正則表達式的末尾用'(/.*)?'替換'/.*',它可以讓你的url不需要尾隨'/'。 – Aust

+0

是的,我看到了這一點,一直在實施一次更改,一直在玩它。希望我對正則表達式有更深的瞭解,有時間再次學習我的學習帽子:) – jammypeach

1

嘗試改變正則表達式非貪婪:

RewriteRule ^products/(.*?)/(.*?)/.*$ /product.php?param1=$1&param2=$2 

或:

RewriteRule ^products/([^/]+)/([^/]+)/.*$ /product.php?param1=$1&param2=$2 
相關問題