2013-08-20 15 views
1

我有一個類別頁面,它通過循環列出數據庫中的所有項目。

類別頁面中的每個項目都鏈接到與類別頁面位於同一目錄中的單個產品頁面(product.php)。產品頁是動態的,它的含量取決於$ _GET變量的值:

從主類別頁面生成該product.php頁的鏈接是:

<a href="product.php?subject=<?php echo urlencode($list_savory["product_name"]); ?>"> 

所得product.php網址是顯示爲:

shop/popcorn/product.php?subject=Bacon+and+Cheddar+Popcorn 

添加以下代碼的.htaccess刪除查詢字符串和「+」替換爲破折號:

RewriteEngine on 
RewriteBase/

RewriteCond %{QUERY_STRING} !no-redir [NC] 
RewriteCond %{QUERY_STRING} (^|&)subject=([^&]+) [NC] 
RewriteRule ^(.*)/product.php$ $1/%2? [NC] 

RewriteRule ^([^+\s]+)(?:[+\s]+)([^+\s]+)((?:[+\s]+).*)$ $1-$2$3 [DPI,N] 
RewriteRule ^([^+\s]+)(?:[+\s]+)([^+\s]+)$ $1-$2 [R=301,DPI,L] 

的.htacess代碼後,生成的URL的格式

shop/popcorn/Bacon-and-Cheddar-Popcorn 

的代碼的.htaccess完美的作品重新設置URL的,但我失去了訪問$ _GET變量,這樣的頁面沒有正確加載。我如何修改.htaccess代碼以便傳遞$ _GET變量?

+0

你是...刪除獲取變量。他們不會被通過。通常重寫是在相反的方向完成的。 –

+0

你做錯了:這就是所謂的'路由機制',應該完全通過'MVC/MVP/MVVM'模式使用PHP本身來完成。 – Yang

+0

而且,由於您使用'mod_rewrite'來訪問變量,因此'$ _GET'將不再按您期望的方式工作。相反,您應該爲'$ _SERVER ['REQUEST_URI']' – Yang

回答

0

如果你不想查詢字符串,不要在你的內容添加:

<a href="<?php echo urlencode($list_savory["product_name"]); ?>"> 

導致作爲顯示網址:

/shop/popcorn/Bacon+and+Cheddar+Popcorn 
在htaccess文件

然後,你需要將其內部路線product.php並通過產品名稱爲「主題」:

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^shop/popcorn/(.*)$ /shop/popcorn/product.php?subject=$1 [L,B,NC] 

ñ不要確定你的其他規則應該做什麼,我認爲你可以將它們追加到適當的地方。 以上的規則需要位於文檔根目錄中的htaccess文件中。

+0

我更新了問題以顯示我試圖實現的結果URL。您的代碼是否考慮到我也想剝離「產品」參考? – Chris

+0

@Chris只刪除所有「/ product」路徑節點。 (我編輯了他們的答案) –

+0

更新了工作代碼和URL的格式正確,但我收到一個404服務器錯誤('請求的URL /shop/popcorn/product.php在此服務器上找不到'。 )我在本地工作的事實是否會造成這種情況? – Chris