我需要一些关于创建用户配置文件系统的帮助。我希望它像Facebook或Myspace那样,在地址后面只有用户名,没有问号或任何东西,例如www.mysite.com/username。我已经完成了所有的注册、日志脚本等,但是如何使用上面的URL示例"/username“进入配置文件呢?
发布于 2009-07-25 00:23:57
您需要创建一个mod重写,它采用第一个目录并将其作为$_GET参数传递。
试试这个:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)/$ index.php?user=$1这应该会将'/‘之后的任何内容重写为index.php?user=directory
发布于 2009-07-25 02:39:28
以下是我的答案的节选版本,以防任何人在tldr时刻:
REQUEST_URIRewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/users/index.php'REQUEST_URI
现在,对用户目录进行的所有扩展的页面请求都将转到index.php
index.php获取用户输入的URL,并获取末尾的部分。有很多种方法可以做到这一点,如果你知道最后一部分永远是用户名,而不是用户名/图片/,这里有一个简单的方法:
$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'现在,只需在DB中查询该用户名。如果存在,index.php会输出配置文件,如果它没有将脚本重定向到: /users/404.php
但是,如果用户确实存在,您的访问者将看到的是他们输入的
www.example.org/users/foo/他们进入了foo的用户页面。
没有get变量可供黑客利用,一个漂亮的、容易放在另一个博客或名片上的URL。
实际上,可以去掉"?“并且有一个很好的简单的www.example.org/users/someusername。
我在A List Apart上Till Quack的文章"How to Succeed with URLs“中了解到了这一点。
因此,您需要了解Apache、.htaccess和mod_rewrite,这种方法确实要求您了解安全风险并说明它们的原因。这是基本的想法:
您创建了一个名为"users“的目录(您不必这样做,但这将简化整个过程),并在该目录中放入包含一个mod_rewite的.htaccess文件,该all有效地表示”所有非特定类型的文件或目录请求(图像、pdf)都应发送到此脚本,该脚本将处理将用户发送到何处“。本文中的mod_rewrite如下所示:
RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/index.php在我的示例中,它应该是"/ your _web_root/users/index.php",它更简单的原因是因为这个脚本不是处理页面上的所有请求,而是只处理用户目录中的请求。
然后,您有一个php脚本,它会说“好的,给出的URL是什么?”它基本上抓住了最后一个斜杠后面的部分(或者两个,如果最后还有一个斜杠的话),清理它找到的东西(这真的很关键),并问“这个用户名是否存在于我的数据库中?”如果是,它会将请求者发送到用户的配置文件,但会提供一个漂亮的URL (我们稍后会讲到),如果不是,它会将它们发送到“未找到用户”页面,或者您想要的任何内容。
因此,如果它找到了您的用户,PHP脚本将输出用户配置文件(同样,请确保对其进行清理。任何你可能有的笨蛋用户都可以--如果你给他们机会--将恶意代码嵌入到他们自己的配置文件中,因为他们知道查看该配置文件的浏览器将执行该代码)。由于请求的页面是:
www.example.org/users/example_user由于您使用的是mod_rewrite而不是重定向,因此URL保持不变,并且.htaccess文件拉出的脚本只会转储用户配置文件。对于访问者来说,他们只是看到他们输入了上面的url,然后用户配置文件就会出现。
您还希望使用PHP脚本检查用户是否重定向到"user not found“页面,而不是简单地让它输出"user_not_found”页面。这就是说,任何人只要输入:
www.example.org/users/blabhaboehbohe将看到URL更改为
www.example.org/users/notfound/而不是看到URL保持不变。如果黑客发现URL没有改变,他们现在知道你正在使用一个mod_rewrite,因此必须有一个脚本来处理实际的输出。如果他们知道了这一点,他们就会开始疯狂地寻找你可能留下的每一个安全漏洞。
干杯。
发布于 2009-07-25 00:42:03
看一看rewrite engine。一些框架也有完成这项工作的类,比如Zend Framework有你可以使用的Zend_Router。你可以自己使用这个版本,其他框架也有,请查看文档了解你喜欢的版本。
https://stackoverflow.com/questions/1180779
复制相似问题