我有一个基于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