我有一個基於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文件查詢我的數據庫,因此沒有辦法創建一個簡短的規則。
感謝,
喬爾
由於我用用戶插入的文本查詢字段(某人可以使用/ page/Made-Up-Name)我需要額外注意什麼?是mysql_real_escape_string($ _ GET [「pageName」]);足夠? – Joel 2010-11-03 09:41:59
它應該是 - 用戶生成輸入的問題往往是經常犯的錯誤。但是我會提供一些確保websafename只包含允許的字符的東西 - 例如:$ Webname = ereg_replace(「[^ A-Za-z0-9]」,「 - 」,$ string_to_be_stripped); – Repox 2010-11-03 09:51:45
謝謝!我編輯了我的問題:) – Joel 2010-11-03 12:52:39