我需要帮助创建用户配置文件系统。我想要它像 Facebook 或 Myspace 一样,在地址后只有用户名,没有问号或其他任何东西,例如,www.mysite.com/username
。我已经完成了所有的注册、登录脚本等等,但是如何使用上面的 URL 示例 "/username" 前往配置文件呢?
我需要帮助创建用户配置文件系统。我想要它像 Facebook 或 Myspace 一样,在地址后只有用户名,没有问号或其他任何东西,例如,www.mysite.com/username
。我已经完成了所有的注册、登录脚本等等,但是如何使用上面的 URL 示例 "/username" 前往配置文件呢?
您需要创建一个 mod rewrite 规则,将第一个目录作为 $_GET 参数传递。
可以尝试以下方法:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)/$ index.php?user=$1
这个应该将 '/' 后面的任何东西重写为 index.php?user=directory。
$url_request = $_SERVER['REQUEST_URI']; //Returns path requested, like "/users/foo/"
$user_request = str_replace("/users/", "", $url_request); //this leaves only 'foo/'
$user_name = str_replace("/", "", $user_request); //this leaves 'foo'
www.example.org/users/foo/
他们访问了foo的用户页面。
没有可供黑客利用的get变量,而且还有一个漂亮、易于放置在其他博客或名片上的URL。
实际上,可以摆脱“?”并拥有一个漂亮简单的www.example.org/users/someusername。
我是从Till Quack的文章“如何成功使用URL”中了解到这一点的,该文章发布在A List Apart上。
因此,您需要了解Apache、.htaccess和mod_rewrite,并且这种方法确实需要您了解安全风险并加以考虑。以下是基本思路:
您创建一个名为“users”的目录(您不必这样做,但这将简化整个过程),并在该目录中放置包含mod_rewite的.htaccess文件,该文件有效地表示“所有不属于某种类型(图像、pdf)的文件或目录请求都应发送到此脚本,该脚本将处理将用户发送到哪里。” 文章中的mod_rewrite看起来像这样:
RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/index.php
www.example.org/users/example_user
由于您使用的是mod_rewrite而不是重定向,因此URL保持不变,.htaccess文件调用的脚本只是转储用户配置文件。对于访问者来说,他们只看到他们输入了上面的URL,然后用户配置文件出现了。
您还想让PHP脚本检查用户是否要进行重定向到“未找到用户”页面,而不仅仅是输出一个“user_not_found”页面。这样,任何人输入以下内容:
www.example.org/users/blabhaboehbohe
将会看到URL地址的改变
www.example.org/users/notfound/
与其看到URL保持不变,不如改变它。如果黑客发现URL没有改变,他们就会知道你正在使用mod_rewrite,并且必须有一个脚本处理实际输出。如果他们知道了这一点,他们可以开始疯狂地寻找你可能留下的每一个安全漏洞。
祝好。
看一下重写引擎。一些框架也有类来完成这项工作,例如Zend Framework有Zend_Router可以使用。你可以单独使用它,其他框架也有类似的功能,请查看您所选择的框架的文档。