我有一个基于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文件中查询我的数据库,所以没有办法创建一个简短的规则。
谢谢,
乔尔
答案 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中提供。