Php 类似Twitter的URL是如何工作的?

Php 类似Twitter的URL是如何工作的?,php,mod-rewrite,Php,Mod Rewrite,我是一名PHP程序员(新手)。我真的很欣赏Twitter使用动态URL处理用户名的方式- 它是如何做到这一点的?甚至Quora和SO也以类似的方式工作。我知道get方法,然后设计模板并使用会话导入数据 但是,这个动态URL是如何工作的呢?这一切都是从.htaccess URL重写开始的。虽然Twitter不是用PHP编写的,但可以实现同样的效果 使用.htaccess或httpd.conf(如果使用Apache),可以添加规则 RewriteEngine on RewriteRule .* in

我是一名PHP程序员(新手)。我真的很欣赏Twitter使用动态URL处理用户名的方式-

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


但是,这个动态URL是如何工作的呢?

这一切都是从.htaccess URL重写开始的。

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

使用
.htaccess
httpd.conf
(如果使用Apache),可以添加规则

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

然后,通过查看
$\u服务器['request\u URI']
,您可以访问该URL以决定将请求路由到何处

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


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

每当您看到带有#的url时!(称为hash bang)然后,您看到的页面将通过javascript和ajax调用生成到服务器,以返回所需的所有数据

在Twitter的例子中,当他们的服务器接收到一个url Twitter.com/username时,有一个url重写脚本将浏览器重定向到Twitter.com/#!/username,它只是站点的根目录。该页面上的javascript随后会获取该url在!#之后的部分,并进行编码以显示正确的信息


我也建议阅读这个方法的来源,为什么有些人认为它不是一个好主意。< / P>他们使用的是你喜欢的东西,只是想知道唯一的基于名字的URL是如何工作的,而不是推特如何工作的。所以,更新了标题。所以不在Apache上运行,所以没有。de>RewriteRule.*index.php?loc=$0[PT]?哦……那么twitter是用什么语言写的呢?@Jonah这种方式使它看起来更好,如果你没有访问
mod_rewrite
@sarth最初是ruby(在rails上),但由于可伸缩性问题,他们改用Scala。