在 facebook 和许多其他网站上,您会看到诸如 www.facebook.com/username 之类的 URL。像这样的 URL 是如何从 MySQL 数据库中实际加载用户信息的?它显示的实际文件是什么?我会假设它所指的每个用户都没有真正的文件夹。如果我的问题没有意义,您至少可以指出我正确的方向来通过 PHP 设置这样的东西吗?
同样,我希望 example.com/username 加载我的用户资料。这是如何运作的?
它都是通过数据库动态加载的。例如,我的 Facebook 名称是“benroux”。在 facebook 的用户表中,会有一个独特的列,比如说,昵称。当我访问 Facebook 时,他们正在解析路径信息并实质上以以下形式调用查询:
select * from user where nickname = "{$nickName}"
现在,这是一个过于简化的示例,但我希望它能让您了解这里发生了什么。关键是有 2 种类型的 url vars,thefacebook.com/pagename.php?id=blah
和 restful style path info varsfacebook.com/pagename/var1/var2/
如果您正在寻找example.com/benroux
加载我的用户页面,您需要让您的 index.php(我将使用 PHP)加载路径信息(http://php.net/manual/en/function.pathinfo.php)和然后像我上面描述的那样查询数据库。
尝试
print_r($_SERVER);
你会得到那个参数。然后你只需要拆分它们。就像是
$directory = $_SERVER['REQUEST_URI'].split('/')[1];
所以,放入$directory
查询
通过使用 apache 的 .htaccess 文件来管理 RewriteEngine,您的所有页面都可以通过 index.php 文件进行汇集。在确认请求的页面实际上不是您打算成为网页默认部分的页面后,您可以使用下面的代码来查找用户帐户。如果未发现用户帐户,则很可能正在访问的页面只是一个 404,然后您可以将其重定向到一个包罗万象的场景
.htaccess 文件
RewriteEngine on
RewriteBase /
RewriteRule !\.(xml|js|ico|gif|jpg|png|css|swf|php|txt|html|otf)$ index.php
在确认请求的页面后运行的 php 逻辑,与联系我们页面或最终用户尝试访问的任何典型网页不同。
if(preg_match("/^\/(?P<username>[^\/]*)/", $_SERVER['REDIRECT_URL'], $matches)) {
$result = mysql_query("SELECT * FROM users WHERE username = '" . mysql_real_escape_string($matches['username']) . "'");
if($user_record = mysql_fetch_row($result)) {
echo "DO WHATEVER YOUR HEART CONTENTS HERE :)";
} else {
header("Location: error-404.php");
}
}