如何动态重写像Facebook这样的URL

时间:2011-02-05 15:34:37

标签: php url mod-rewrite

我使用PHP编写了我的网站,不幸的是,艺术家资料目前是这样的:

website.com/profiles.php?id=xxx

这样我就可以获取id并查询数据库。

但是艺术家现在要求使用website.com/artistname作为他们的网址。就像Facebook和Myspace一样。我想。

我仍然需要能够获取艺术家ID,以便我可以查询数据库。

我想我将不得不使用mod_rewrite并在某处触发php函数,但我不确定该怎么做!

过去一天我在网上寻找类似的东西,但我似乎无法找到我想要的东西!

如果有人对我如何做到这一点有任何想法,或者帮助我的例子会很棒!

由于

4 个答案:

答案 0 :(得分:1)

如果您不想在网址中使用该ID,则艺术家姓名必须是新ID,因此是唯一的。

在这种情况下,您可以在文档根目录的.htaccess文件中执行以下操作,将/<artistname>内部重写为/profiles.php?name=<artistname>

RewriteEngine on
RewriteRule ^([a-z]+)$ profiles.php?name=$1

此处艺术家姓名也仅限于由字母组成。对于其他字符(尤其是./),您应该考虑不允许与现有文件冲突的值(例如profiles.php)。如果您从真实姓名中获取URL艺术家名称,请确保不允许冲突。在这种情况下,您仍然需要人工ID来使URL路径唯一。

答案 1 :(得分:1)

可以使用网址“slug”,其中记录具有唯一名称,即:

id     name             slug
001    Stack Overflow   stack-overflow

然后您可以执行以下查询:

SELECT `fields` FROM `table` WHERE `slug`='$slug'

其中slug是URL的值。

我确信会提供替代品。

答案 2 :(得分:1)

你可以使用Gumbo的答案,但你也有一个可能的捷径:

您还可以使用404处理程序将/ artistname网址重定向到/profiles.php?id=xxx

以下是你将如何做到这一点:

  1. 创建一个名为/router.php的文件
  2. 编辑.htaccess文件并将此行添加到其中:ErrorDocument 404 /router.php
  3. 让router.php查找艺术家ID并重定向到/profiles.php?id=xxx - 如果找不到任何内容,router.php可以重定向到另一个404页面或执行404标题+消息
  4. 这个方法的好处是你不必启用mod_rewrite。 (如果这是一个问题)

答案 3 :(得分:0)

首先,您需要更改您的艺术家表格,添加一个新列以定义艺术家的别名,例如'david-matthews-band',创建一个独特的索引,以防止与同音异义词艺术家混淆。

您需要编辑profile.php以按别名查找艺术家,例如website.com/profile.php?q=david-matthews-band

创建重写规则,将website.com/profile/david-mattews-band转换为website.com/profile.php?q=david-matthews-band:

RewriteEngine On
RewriteRule ^profile/*  profile.php?q=$1