将任何细节作为答案是不可能的,因为你必须建立你自己的这个系统,而且有不止一种方法可以做到。设计决策需要根据您希望事物工作的方式以及您已经拥有的东西(它们必须以某种方式协同工作)来做出。
假设您已经有了一个用于创建用户的系统(听起来确实如此),并且您已经有了一个用于查看配置文件的系统。您需要扩展此系统,以便在数据库的用户表中存储一个额外的“my_vanity_url”字段。该字段必须是唯一的。当用户编辑他们的个人资料时,他们可以选择将其更改为他们想要的任何内容(为简单起见,将其限制为仅字母和数字以及破折号)。
接下来,当您显示此配置文件时,假设它是 via /profile.php
,您的代码需要检查一些事情。
- 首先它需要检查它是如何被调用的,看着
$_SERVER['REQUEST_URI']
你可以看到/user/some-vanity-name
或/profile.php?u=1234
。
- 如果是后者,则需要重定向浏览器,进行数据库查找以查看具有 user_id 的用户
1234
是谁。
- 将此用户从数据库中拉出“my_vanity_url”列并将浏览器重定向到
/user/my_vanity_url_value
(替换my_vanity_url_value
为该列的值)。
所以现在,如果您访问http://your.domain.com/profile.php?u=1234,您的浏览器会被重定向,并且 URL 地址栏会显示http://your.domian.com/user/my_name。
接下来,您需要能够使用该唯一名称并将其变回旧的丑陋的个人资料页面。这里需要做两件事:
- 您需要再次扩展您
profile.php
以采用可选的虚荣名称而不是 user_id
- 您需要使用 mod_rewrite 在内部将虚名路由到
/profile.php
首先,您只需寻找不同的$_GET[]
参数,而不是寻找 user_id 的任何参数。说它被称为name
:所以看看$_GET['name']
它是否存在,如果它确实在用户表中查找其虚 url 名称为的用户$_GET['name']
。返回该用户的个人资料。
对于第二件事,您只需将其放在文档根目录中的 htaccess 文件中的适当位置:
RewriteEngine On
RewriteRule ^/?user/([A-Za-z0-9-]+)/?$ /profile.php?name=$1 [L]
这只是如何实现这样的事情的一个例子。它可能完全不适用于您拥有的东西,但它应该让您了解您需要做什么。