2012-02-16 83 views
0

我有這個網址:添加 - 而不是URL重寫空格

http://www.site.com/en/about.php?id=112&name=andrew marshall dickens 

,我想重寫它是這樣的:

http://www.site.com/112/andrew-marshall-dickens.html 

至今:

RewriteRule ^([^/]*)/([^/]*)\.html$ /en/about.php?id=$1&name=$2 [L] 

我遇到了' - '字符的問題。有什麼建議嗎?謝謝!

+0

爲什麼不在'about.php'中''str_replace(' - ','',$ _GET ['name'])''? – DaveRandom 2012-02-16 17:32:57

回答

1

那麼你試圖使用正則表達式從字符串的中間刪除字符,該字符串中的任何數字的字符都可以在RewriteRule中使用。一方面,這不太可能,另一方面,你傳遞了ID,所以我認爲你可以使用你的PHP腳本中的id來獲取名字,所以實際上並不需要從URL中解析名稱變量,作爲第三個選項,爲什麼不只是str_replace - 字符在PHP和ucwords()字符串之前輸出它,如果你想使用名稱變量?

+0

我想爲SEO原因添加名稱參數。有沒有其他解決方案將名稱添加到網址? – 2012-02-16 17:42:01

+0

我想你誤解了我。您可以將SEO名稱添加到搜索引擎優化的目的網址中,但這並不意味着您需要將它解析回您的PHP腳本中,如果您在腳本中依賴這些數據,我不會解析它。 – Brian 2012-02-16 17:44:29

+1

RewriteRule ^([^ /] *)/([^ /] *)\。html $ /en/about.php?id=$1 [L]會更高效,您可以在PHP中使用ID參數從數據庫中讀取名稱,以便有人不能更改URL並更改頁面的輸出。因此,網站site.com/112/andrew-marshall-dickens.html將指向與site.com/112/suck-my-balls.html相同的網頁,即使有人更改了網址,您的網頁仍然會說「安德魯馬歇爾狄更斯「而不是」吸我的球「。防止某人惡意重寫URLS並在網站上發佈,從而給您帶來不好的聲譽。 – Brian 2012-02-16 17:45:12

0

我相信你不需要傳遞名稱參數,因爲id可以得到它。

總之:

RewriteRule ^([0-9]+)/([a-z-]+)\.html$ /en/about.php?id=$1&name=$2 [L] 

但是,嘿,閱讀評論,我只是意識到:什麼是你的問題?你的正則表達式應該已經工作了

+0

它不工作......它給我一個404錯誤。 – 2012-02-16 17:40:34

+0

你的正則表達式也給404錯誤? – dynamic 2012-02-16 17:50:51