English 中文(简体)
使用nginx重写来隐藏或清理URL?
原标题:
  • 时间:2009-02-27 23:21:14
  •  标签:

问候。

我一直在努力理解正则表达式和重写,但我对此还是个新手。我有一个简单的网站,只有一个目录,我想要的是将domain.com/file.php?var=value重写为domain.com,并确保用户在整个网站导航期间在地址栏中只能看到domain.com(即使我开始使网站更加复杂)。

简单说,它只是将URL冻结,尽管如果站点增长,我宁愿采用一些“清晰的URL”方法,但我还停留在基本的PHP方面,我感觉我需要阅读有关http/1.1的文档。

问题回答

你可以使用类似这样的nginx重写规则:

rewrite  ^([^.]*)$  /index.php

将所有不含“。”的请求发送到您的index.php脚本。在您的php脚本中,使用explode函数获取传递的参数,然后调用您想要的php页面:

#URL /people/jack_wilson
$url_vars = explode( / ,$_SERVER[ request_uri ]); # array(  , people , jack_wilson );
$page = $url_vars[1];
if($page ==  people ){
   $username = $url_vars[2];
   require( people.php ); #handle things from here.
}

通常这种“干净”的URL数据通常是通过整个网站的包装框架来实现的。浏览器仅显示该框架的URL,而内容可以是任何内容。

但我实际上并不推荐这样做,因为用户可能想要书签保存这个“脏”的网址。

这种类型的URL混淆降低了高级用户的可用性。

不想太刻薄,但是我通常只在那些更在乎他们网站地址栏外观而非用户体验的“艺术”网站上看到这种类型的URL混淆。我认为,通过提高可用性来让用户满意是更好的长期方案。

我猜测冻结网址是受到市场需求的驱动,所以从市场角度来看,这是它的缺点:你的用户将无法通过即时通讯、电子邮件或 Facebook 向他们的朋友发送他们喜欢的页面的链接,因此即使对于最愚蠢的用户,它实际上降低了您的网站诱惑力。

我不认为让php变量在地址栏显示是安全的(尽管它们会在某些浏览器的状态栏中显示...)。理想情况下,用户不应该知道站点在幕后使用的是什么 - 我正在为启动配置错误页面。当然,美观也很重要。如果我能重写成domain.com/foo/bar我会很高兴;假设nginx会处理“将其翻译回难看的URL”的请求,我认为它会用location-directives这样做。但是,domain.com/file.php?var1=value&var2=value有点让我烦恼,让我感觉我暴露了这个站点。

框架不建议使用(特别是因为搜索引擎),我正在努力坚持使用 XHTML 1.1 严格版(目前为止还好)。如果内容设计得好,易于导航,无论使用哪种浏览器都可以访问,直观等等...我猜我可以接受漂亮的 URL :)

我很愿意阅读任何关于良好网页设计技术、php、http/1.1的rtfm材料,以及在凌晨4点让你兴奋的各种内容。

谢谢 :)

如果我理解正确的话,这应该是对原始帖子的回复,而不是对答案的回复......抱歉。

你也可以尝试使用PHP框架,例如Code Igniter,它可以为你处理所有的PHP方面的事情。

http://codeigniter.com/ 的中文翻译为:http://codeigniter.com/





相关问题
热门标签