2010-11-03 49 views
0

我有一個基於PHP的網站,其中包含動態頁面,例如/page.php?ID=1。 URL中的ID表示具有「名稱」字段的條目的MySQL數據庫中的唯一鍵。 據我所知,爲了將所有我的URL從/page.php?ID=1轉換到/ page/New-York(其中行ID = 1的名稱字段是紐約),我需要使用.htaccess文件。將多個動態頁面轉換爲靜態

什麼是最好的方法來做到這一點?如何使用下列內容:

RewriteEngine on 
RewriteCond %{QUERY_STRING} ^ID=1$ 
RewriteRule ^/page.php$ http://www.example.com/page/New-York [L,R=301] 

但在某種程度上,它會檢索名稱(在這種情況下,紐約)從MySQL數據庫,對所有項目嗎?


編輯:

Repox的答案是下一步非常好,那就是如何一次我設置了靜態的URL抓取從數據庫的條目。

但是,我還需要從另一個問題開始:由於我的網站已有兩三年曆史,因此Google已將所有網頁編入索引,因此/page.php?ID=2/page.php?ID=3已位於Google的數據庫中。所以,我需要建立一個301重定向(在.htaccess)爲每個現有的頁面到新的頁面,即:

redirect 301 /page.php?ID=1 /page/new-york 
redirect 301 /page.php?ID=2 /page/berlin 
and so on... 

有沒有更好的(也許更有效)的方式來做到這一點,而不是隻寫2500行條目和他們的目標?我看到的問題是,我無法從.htaccess文件查詢我的數據庫,因此沒有辦法創建一個簡短的規則。

感謝,

喬爾

回答

0

你將不得不讓PHP解釋的頁面爲您服務。

簡單的方法是將字段添加到您的表中,稱爲Webname,並且對於名爲'New York'的頁面,Web安全名稱將爲'New-York'。

page.php然後將查詢表的Webname而不是pageId。

你的.htaccess應該再看看更多的是這樣的:那麼

RewriteEngine On 
RewriteRule ^page/?$ page.php?pageName=$1 [NC,L] 

你的網絡安全頁面名稱將在$ _GET [ 「頁面名」] page.php文件可用。

+0

由於我用用戶插入的文本查詢字段(某人可以使用/ page/Made-Up-Name)我需要額外注意什麼?是mysql_real_escape_string($ _ GET [「pageName」]);足夠? – Joel 2010-11-03 09:41:59

+0

它應該是 - 用戶生成輸入的問題往往是經常犯的錯誤。但是我會提供一些確保websafename只包含允許的字符的東西 - 例如:$ Webname = ereg_replace(「[^ A-Za-z0-9]」,「 - 」,$ string_to_be_stripped); – Repox 2010-11-03 09:51:45

+0

謝謝!我編輯了我的問題:) – Joel 2010-11-03 12:52:39