2010-07-28 83 views
0

我猜標題幾乎說明了一切。試圖獲得產品名稱和產品ID在最後和之間的斜線與網址?p =

我原來的URL看起來像:http://www.something.com/buy/index.php?p=025823

的的.htaccess我用這樣的容貌:

Options +FollowSymLinks 

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(\d+)*$ ./index.php?p=$1 

結果URL看起來像:http://www.something.com/buy/025823

我想結束網址如下:http://www.something.com/buy/Product Name/025823/

任何人都可以幫忙嗎?特別是那個Gumbo傢伙! LOL

回答

0

如果您可以控制生成到您的/buy/頁面的鏈接,只需將該產品名稱插入到URL中(請記住URL的規則,例如不允許空格)通常,人們用-代替空格) 。然後修改您的重寫正則表達式以忽略您的URL的產品名稱部分。

RewriteBase/
RewriteRule ^/buy/(.+)/(\d+)/$ ./index.php?p=$2 

如果你無法控制的鏈接,事情變得更加複雜,因爲你必須使用RewriteMap查找的產品名稱,然後執行重定向。我最近報道的是similar question。我的answer to that question詳細介紹了使用RewriteMap,但我認爲該答案的細節不適用於您的情況,因爲使用靜態定義的產品列表可能無法滿足您的需求。

基本上,您需要實現一個可以從mod_rewrite的RewriteMap規則調用的腳本。你會需要這樣的東西:

RewriteMap prodname pgm:/path/to/script/namelookup.sh 
RewriteRule ^/buy/(\d+)/$ /buy/${prodname:$1}/$1/ [R=permanent] 

凡namelookup.sh(或其他)的URL編碼的格式返回產品的名稱(在標準輸出上)。您一定想看看mod_rewrite's documentation關於使用RewriteMap,特別是關於使用外部重寫程序的RewriteMap Directive的最後一部分。

+0

太棒了!喬什,你達人!我一直在嘗試兩天來獲得這個,忽略了其他客戶的工作。這就是我最終的結果。由於我的.htaccess位於buy目錄中,因此稍作修改。剛開箱就工作得很好。選項+ FollowSymLinks RewriteEngine On RewriteCond%{REQUEST_FILENAME}!-f RewriteCond%{REQUEST_FILENAME}!-d RewriteRule ^(。+)/(\ d +)/ $ ./index.php?p=$2再次感謝! – Fisherman 2010-07-28 20:08:23

+0

看起來像評論不允許適當的段落。抱歉。 – Fisherman 2010-07-28 20:09:25

+0

@Douglas:我很高興能夠幫到你。由於此答案適合您,請記得點擊上面的綠色複選標記,將此答案標記爲已接受,並且您的問題已解決。 – josh3736 2010-07-28 21:52:41