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

Php 将多个动态页面转换为静态页面,php,apache,.htaccess,Php,Apache,.htaccess,我有一个带有动态页面的基于PHP的站点,比如/page.PHP?ID=1。 URL中的ID表示MySQL数据库中具有“名称”字段的条目的唯一键。 我明白,为了将我的所有URL从/page.php?ID=1转换为/page/New York(其中,行ID=1的名称字段是New York),我需要使用.htaccess文件 最好的方法是什么?我如何使用以下各项: RewriteEngine on RewriteCond %{QUERY_STRING} ^ID=1$ RewriteRule ^/pa

我有一个带有动态页面的基于PHP的站点,比如/page.PHP?ID=1。 URL中的ID表示MySQL数据库中具有“名称”字段的条目的唯一键。 我明白,为了将我的所有URL从/page.php?ID=1转换为/page/New York(其中,行ID=1的名称字段是New York),我需要使用.htaccess文件

最好的方法是什么?我如何使用以下各项:

RewriteEngine on 
RewriteCond %{QUERY_STRING} ^ID=1$
RewriteRule ^/page.php$ http://www.example.com/page/New-York [L,R=301]
但是在某种程度上,它将从MySQL数据库中检索所有条目的名称(在本例中为纽约)


编辑:

Repox的答案对于下一步非常有用,即在设置静态URL后如何从DB中获取条目

然而,我还有一个问题需要解决:因为我的网站已经有几年的历史了,谷歌已经为我的所有页面编制了索引,所以
/page.php?ID=2
/page.php?ID=3
已经存在于谷歌的数据库中。因此,我需要为每个现有页面创建一个301重定向(在.htaccess中)到新页面,即:

redirect 301 /page.php?ID=1 /page/new-york
redirect 301 /page.php?ID=2 /page/berlin
and so on...
有没有比只写2500行条目和它们的目标更有效的方法呢?我看到的问题是,我无法从.htaccess文件中查询我的数据库,因此实际上没有创建短规则的方法

谢谢


Joel

您必须让PHP为您解释页面

简单的方法是向表中添加更多字段,称为Webname,对于名为“New York”的页面,websafe名称将为“New York”

php将在表中查询Webname而不是pageId

您的.htaccess应该更像:

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

然后,您的websafe pagename将在page.php中以$_GET[“pagename”]的形式提供。

因为我查询的字段中有用户插入的文本(有人可以使用/page/maked-Up-Name),我需要额外注意什么?是mysql_real_escape_字符串($_GET[“pageName”]);够了吗?应该够了-用户生成的输入的问题是经常出错。但我会提供一些确保websafename只包含允许的字符的东西,比如:$Webname=ereg_replace(“[^A-Za-z0-9]”、“-”、$string_to_剥离);您仍然可以维护page.php?ID=1部分,但是通过带有标题的php重定向页面(“HTTP/1.1 301永久移动”);和标题('位置:/page/纽约);使用通过页面ID获得的Webname。这使得页面可以通过Google访问,但仍然会告诉Google和客户端页面已移动。