将多个动态页面转换为静态页面

时间:2010-11-03 09:14:46

标签: php apache .htaccess

我有一个基于PHP的网站,其中包含动态网页,例如/page.php?ID=1。 URL中的ID表示条目的MySQL数据库中的唯一键,该条目也具有“名称”字段。 我理解为了将我的所有网址从/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文件中查询我的数据库,所以没有办法创建一个简短的规则。

谢谢,

乔尔

1 个答案:

答案 0 :(得分:0)

您必须让PHP为您解释页面。

简单的方法是在您的表中添加更多字段,称为Webname,对于名为“New York”的页面,网页安全名称将为“New-York”。

page.php然后会在表中查询Webname而不是pageId。

你的.htaccess应该更像是:

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

您的网页安全页面名称将在$ _GET [“pageName”]中的page.php中提供。