0

在 facebook 和许多其他网站上,您会看到诸如 www.facebook.com/username 之类的 URL。像这样的 URL 是如何从 MySQL 数据库中实际加载用户信息的?它显示的实际文件是什么?我会假设它所指的每个用户都没有真正的文件夹。如果我的问题没有意义,您至少可以指出我正确的方向来通过 PHP 设置这样的东西吗?

同样,我希望 example.com/username 加载我的用户资料。这是如何运作的?

4

3 回答 3

0

它都是通过数据库动态加载的。例如,我的 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)和然后像我上面描述的那样查询数据库。

于 2012-05-04T03:02:54.403 回答
0

尝试

print_r($_SERVER);

你会得到那个参数。然后你只需要拆分它们。就像是

$directory = $_SERVER['REQUEST_URI'].split('/')[1];

所以,放入$directory查询

于 2012-05-04T03:08:24.310 回答
0

通过使用 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");
    }
}
于 2012-05-04T03:17:09.760 回答