【发布时间】:2012-01-01 16:52:59
【问题描述】:
我有一个用 php 编写的网站,它为每个项目(在类别和搜索页面上)创建“漂亮”的 url,就像这样,
mysite.com/category/slug-for-item-one/1
mysite.com/category/slug-for-item-two/2
/category/ 和 /slug/ 取决于项目的数字 id
我有 mod_rewrite 从 url 提供实际内容,如下所示:
mysite.com/view-item.php?id=1
mysite.com/view-item.php?id=2
仅使用项目 ID 检索每个项目的内容。
这是我的 htaccess:
RewriteEngine on
RewriteRule ^([^/\.]+)/?$ view-item.php?id=$1 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ view-item.php?pid=$2 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ view-item.php?id=$3 [L]
到目前为止一切正常,但是,如果有人登陆类似的网址,
mysite.com/1
mysite.com/catey/slug-for-item-one/1
或
mysite.com/category/slug-item-one/1
内容仍然提供,但我怎样才能自动重置或重定向到 url 的规范版本,到:
mysite.com/category/slug-for-item-one/1
我已经在 SO 和谷歌上广泛搜索了答案,但没有运气。我只将 mod_rewrite 用于简单的重定向,例如从没有 www 的重定向。与 www。我的理解是暂时的,因此我目前正在努力理解如何进行。
谁能指出我正确的方向?
感谢大家的帮助。非常感激。我正在实现 Jon Lin 的答案,因为我更熟悉使用 php/mysql 数据库并了解它应该如何工作以及为什么工作。我的目标是在星期五之前完成,完成后会更新此页面。非常感谢,卡尔。
* 更新 * 我已经实现了 Jon Lin 的回答,现在我的“漂亮”网址在输入错误时被重定向到正确或“规范”的网址,就像在 SO 上一样。感谢 Jon 和所有做出贡献的人!
【问题讨论】:
-
是“类别”静态(即不变)还是动态(即您可以拥有像
mysite.com/shirts/slug-for-item-two/2然后mysite.com/hammers/slug-for-item-two/3这样的 URL 等等? -
嗨,奥利弗。谢谢你的问题。是的,正如您所描述的那样,类别确实会发生变化。像蛞蝓这样的类别取决于每个项目的 ID。尽管显然许多项目都属于同一类别。比如衬衫、帽子等等。
标签: php apache .htaccess mod-rewrite url-rewriting