类似Twitter的URL如何工作?

时间:2011-03-04 05:29:33

标签: php mod-rewrite

我是一名PHP程序员(新手)。我非常钦佩Twitter使用这样一个动态网址 - http://twitter.com/username

使用其用户名的方式

它是如何设法的?甚至Quora和SO也以类似的方式工作。我知道get方法,然后设计模板并使用会话导入数据。

但是,这个动态网址的工作原理是什么?

4 个答案:

答案 0 :(得分:1)

虽然Twitter不是用PHP编写的,但可以实现相同的效果。

使用.htaccesshttpd.conf(如果使用Apache),您可以添加规则。

RewriteEngine on
RewriteRule .* index.php/$0 [PT]

然后,您可以通过查看$_SERVER['REQUEST_URI']来访问该网址,以确定将请求路由到何处。

答案 1 :(得分:1)

带有url重写的.htaccess是不够的,因为浏览器(甚至)后面的所有URI部分甚至都不会被浏览器发送到服务器(因为它最初是用于在本地用于在文档中定位锚点)因此,当来自直接链接(Twitter将其链接直接写入html页面中的自己的格式)时,无法通过使用服务器变量来检索它。

除了重写url之外,你需要在你的索引页面内(当没有井号时,这意味着这是一个直接的请求)使用AJAX从浏览器中检索,使用Javascript,后面的URI片段签名,解析它,然后将相关内容推送给访问者。

答案 2 :(得分:0)

这一切都始于.htaccess url重写。

答案 3 :(得分:0)

每当你看到一个带#的网址时! (称为hash-bang)然后通过javascript和ajax生成您正在查看的页面调用服务器以返回所需的所有数据。

在Twitter的情况下,当他们的服务器收到twitter.com/username的网址时,会有一个网址重写脚本,将浏览器重定向到twitter.com/#!/ username,这只是网站的根目录。该页面上的javascript然后获取!#后面的url部分,并编码显示正确的信息。

我还建议阅读http://isolani.co.uk/blog/javascript/BreakingTheWebWithHashBangs关于此方法的来源以及为什么有人认为这实际上不是一个好主意。