2017-08-17 121 views
0

傍晚的傢伙,.htaccess產品ID的改寫

我一直在試圖讓產品ID和名稱的mod重寫工作,但我沒有運氣。我試圖在這裏搜索,但沒有明確的解釋。

這是位於http://www.peakwebdesigns.co.uk/ecommerce/store

例URL我的電子商務演示:http://www.peakwebdesigns.co.uk/ecommerce/product_page?id=3name=Bed

我想:http://www.peakwebdesigns.co.uk/ecommerce/product_page?id=3name=Bed

http://www.peakwebdesigns.co.uk/ecommerce/3-Bed

我的URL結構如下:

<a href='product_page?id=<?php echo $product_array[$key]["product_id"].'name='.$product_array[$key]["product_name"]; ?>' id='product_links'><?php echo '<div id="product_image"><img src="images/'. $product_array[$key]["image"] . '"></div>' ?> \t </a>

這是我目前在我的.htaccess(我知道第幾碼項工作,因爲我已刪除.php然後從文件中的.html):

RewriteEngine On 
 

 
RewriteCond %{REQUEST_FILENAME} !-f 
 

 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 
 

 
RewriteCond %{REQUEST_FILENAME} !-f 
 
RewriteRule ^([^\.]+)$ $1.html [NC,L] 
 

 
RewriteRule ^([0-9])-([A-Z]+)$ product_page?id=$1name=$2 [NC,L]

問題:由於我的/電子商務/包含在我的網址中,以上設置是否正確?

如果不是,任何人都可以幫助我正確書寫這個嗎?

謝謝。 Stan。

+0

「我試過在這裏搜索,但沒有明確的解釋。」嗯,當然有,但更重要的是:爲什麼你會在SO上搜索答案而不是閱讀你使用的工具的文檔? Apache http服務器模塊的文檔質量非常高,並附帶非常好的示例... – arkascha

+0

針對您在問題中提出的特定問題:您是否介意在您放置的服務器端文件系統層次結構中添加問題_where_你使用的動態配置文件? – arkascha

+0

我在Google/YouTube/SO上進行了研究,並試驗了各種代碼。我大膽的問題是我認爲正在影響它的工作原理。這就是爲什麼我在SO這裏問社區。我在SO上找到的每個答案都有如何編寫代碼的變體.EDIT:我已經將.htaccess文件放在/和/ ecommerce/ –

回答

0

我用下面的規則根據所述參數來調整網址:

重寫規則^電子商務/產品/(.*)$ ./ecommerce/product?id=$1 [L,NC]

RewriteRule^ecommerce/category /(.*)$ ./ecommerce/category_page?category_name=$1 [L,NC]

0

有許多可能的設置,我希望這是一個最有可能讓你感覺(你願意給你的情況的信息非常少):

最好是將主機內部的這種重寫規則你的http服務器的配置:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/ecommerce/(\d+)-(\w+)/?$ /ecommerce/product_page?id=$1name=$2 [END] 

或者,你也可以使用動態配置文件。那麼我會建議該文件放置ecommerce文件夾中,並用類似的東西開始:

RewriteEngine on 
RewriteBase /ecommerce 
RewriteRule ^/?(\d+)-(\w+)/?$ product_page?id=$1name=$2 [END] 

對於這個工作,你需要的拳頭啓用動態配置文件的解釋,我們來看一看在AllowOverride指令中該文件。

注意:如果您收到上述規則的http狀態500(內部服務器錯誤),則很可能是您運行的是舊版本的apache http服務器。在這種情況下,請嘗試用[L]標誌替換[END]標誌。

此外,爲了精確,我想指出,您需要格式化正確發送的鏈接。你不能保持代碼創建的鏈接不變,並期望重寫模塊神奇地改變你發送的文字鏈接。


而且一般提示:你應該總是喜歡在http服務器(虛擬)主機配置,而不是使用動態配置文件(.htaccess風格文件)裏這樣的規則。這些文件出了名的錯誤,很難調試,他們真的放慢了服務器。只有當你無法控制主機配置(讀取:真正便宜的主機服務提供商)或者如果你有一個依賴編寫自己的重寫規則的應用程序(這是一個明顯的安全噩夢) )。

+0

感謝您花時間寫這篇文章。 我已經更新了.htaccess,並且我會讀到使用http主機配置文件,當然。 我更新了我的href id-name(使用php變量),但它是404'ing,我也用過/ 3牀,它仍然無法正常工作。有任何想法嗎? –

+0

如果任何人都可以提供幫助,仍然在努力。 重寫規則是 RewriteBase /電子商務 重寫規則^ /?(\ d +)/?$ product_page?編號= $ 1 [END] 試圖改變 http://www.peakwebdesigns.co.uk/ecommerce/ product_page?id = 1 至 http://www.peakwebdesigns.co.uk/ecommerce/product/1 **我希望在/ URL中保留/ ecommerce / –