[英]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
这是您的处理方式:
这种方法的好处是,您不必启用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.