繁体   English   中英

如何动态改写Facebook之类的URL

[英]How to Dynamically Rewrite a URL like Facebook

我已经使用PHP编写了自己的网站,但不幸的是,Artist个人资料当前如下所示:

website.com/profiles.php?id=xxx

这样,我可以获取ID并查询数据库。

但是,艺术家现在要求提供website.com/artistname作为其URL。 我猜像Facebook和Myspace。

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

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

我花了整整一天的时间在网上寻找类似的内容,但似乎找不到我想要的东西!

如果有人对我该怎么做有任何想法,或者有帮助我的例子,那将是很棒的!

谢谢

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

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

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

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

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

id     name             slug
001    Stack Overflow   stack-overflow

那么您可以执行查询,例如:

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

slug是URL中的值。

我确定会提供其他选择。

您可以使用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标头+消息

这种方法的好处是,您不必启用mod_rewrite。 (如果有问题)

首先,您需要更改Artists表,添加一个新列以定义艺术家的别名,例如“ 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM