2010-09-05 169 views
0

我目前有一個整個網站上運行的PHP & GET變量。.htaccess url重寫與php

我的鏈接看起來像這樣目前

http://www.example.co.uk/brochure.php?cat_path=24 

而且偶爾它在URL中的第二個變量...

其實我想我的網址看起來像這樣: http://www.example.co.uk/Concrete_Fence_Posts

所以我的問題很簡單,我怎麼去重寫URL而不會打破我的GET變量。

謝謝。

+0

您目前如何重寫網址嗎? – 2010-09-05 20:14:00

+0

我不是目前重寫所有:(我的網站是很好的搜索引擎優化,我只是想在URL中的產品名稱略有提升它。感謝 – shane 2010-09-05 20:16:50

+0

在什麼格式你希望自己的網址是什麼?顯示的例子。你提到的這個格式是默認的PHP的Apache的一個,不需要重寫規則爲任意數量的GET變量。網址不會打破 – 2010-09-05 20:20:03

回答

2

假設您的參數總是被命名爲cat_pathproduct_id(如果存在的話),你可以做這樣的事情:

RewriteRule ^([^/]+)/([\d+])$   $1.php?cat_path=$2 
RewriteRule ^([^/]+)/([\d+])/([\d+])$ $1.php?cat_path=$2&product_id=$3 

您的網址然後將這些格式之一:

pagename/cat_path 
pagename/cat_path/product_id 

例如:

http://www.bentinckfencing.co.uk/brochure/24 
http://www.bentinckfencing.co.uk/product/35/54 

編輯:我看到你想在URL中使用產品名稱。在這種情況下,您的PHP腳本需要能夠將名稱作爲參數並查找ID。您應該繼續直接接受該ID,以免破壞現有鏈接。然後你重寫規則是這樣的:

RewriteRule ^([^.]+)$   brochure.php?name=$1 

而且http://www.bentinckfencing.co.uk/Concrete_Fence_Posts將改寫爲http://www.bentinckfencing.co.uk/brochure.php?name=Concrete_Fence_Posts

-1

爲了更好的搜索的搜索引擎優化有網址,像計算器 -

http://www.bentinckfencing.co.uk/brochure/24/concrete-fence-posts 

有像搜索引擎不存儲無論是在網址中?後。 這個結尾concrete-fence-posts也可以幫助用戶在瀏覽器地址欄中識別頁面。但是,如果在URL中未使用?,則無法允許某些特殊字符。字符如/,%將破壞URL並且\,#,+將不會出現。

更新

你想從傳遞到名路過ID完全動?我不確定這會有多好,但我聽說有幾個知名網站有這樣的網址。但是,根據您的項目(您有多少個模塊),您可能需要做很多更改。但是,stackoverflow樣式的URL會保留基於ID的項目提取。

進一步更新
你可以試試這個重寫規則必須在URL(計算器風格)兩個編號和名稱: -

RewriteRule ^([a-z0-9\-\_]+)/([0-9]+)/([a-z0-9\-\_]+)/?$ $1.php?cat_path=$1&cat_name=$2 

我沒有,雖然進行了測試。

另一件重要的事情是,我看到您的代碼直接輸入brochure.php,並且沒有在所有模塊的情況下執行的公用文件(公共控制器)。這種方法可能有許多缺點,特別是如果你的應用程序是大中型應用程序。它始終是更好地在這個index.php文件來執行共同index.php文件,包括所需的brochure.php文件中有這樣您就可以執行所有這些公用邏輯(需要所有的模塊)。我有一個共同的index.php文件和下面的重寫規則做同樣的: -

############To remove display of "index.php" from URL 
RewriteCond $1 !^(index\.php|resources|robots\.txt) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^(.*)$ index.php [L,QSA] 
#################################################end of hiding index.php 

RewriteRule ^([a-z0-9\-\_]+)/([0-9]+)/([a-zA-Z0-9\-\_]+)/?$ index.php?a=$1&b=$2&c=$3 

注: -的重寫規則第一塊隱藏URL中的index.php文件和訪問者不知道我的應用程序在PHP中運行。

最後我的網址是這樣的: -

http://www.bentinckfencing.co.uk/brochure/24/concrete-fence-posts 

希望這有助於
Sandeepan

+0

這聽起來像一個完美的解決方案,因爲我想堅持通過ID獲取結果,而不是名稱,我可以弄清楚如何將名字帶入url(帶有另一個GET變量),但我不知道如何實際進行重寫。 ? – shane 2010-09-22 16:51:14

+0

@shane,檢查我的進一步更新部分 – 2010-09-27 06:51:50

+0

上校彈片downvoted我,我99%肯定,甚至不敢寫評論。哈哈 – 2010-12-18 17:28:41