我目前有一個整個網站上運行的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變量。
謝謝。
我目前有一個整個網站上運行的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變量。
謝謝。
假設您的參數總是被命名爲cat_path
和product_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。
爲了更好的搜索的搜索引擎優化有網址,像計算器 -
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
這聽起來像一個完美的解決方案,因爲我想堅持通過ID獲取結果,而不是名稱,我可以弄清楚如何將名字帶入url(帶有另一個GET變量),但我不知道如何實際進行重寫。 ? – shane 2010-09-22 16:51:14
@shane,檢查我的進一步更新部分 – 2010-09-27 06:51:50
上校彈片downvoted我,我99%肯定,甚至不敢寫評論。哈哈 – 2010-12-18 17:28:41
我最近回答了一個類似的問題:
How can I use in .htaccess?
完整的解決方案,新的移動網址
您目前如何重寫網址嗎? – 2010-09-05 20:14:00
我不是目前重寫所有:(我的網站是很好的搜索引擎優化,我只是想在URL中的產品名稱略有提升它。感謝 – shane 2010-09-05 20:16:50
在什麼格式你希望自己的網址是什麼?顯示的例子。你提到的這個格式是默認的PHP的Apache的一個,不需要重寫規則爲任意數量的GET變量。網址不會打破 – 2010-09-05 20:20:03