1
zdkmygod 2017-04-14 18:28:19 +08:00 4
很简单啊,因为 PHP 自带一个 router 的实现,这个 router 实现的比较难用( url 直接对应到文件)。所以大家想用自定义 router 替代自带的 router 的话,首先就得把自带的 router 效果纠正过来,发送给自定义 router 。
而 Python 和 Ruby 不像 PHP 一样本身就是一个简单的框架, HTTP 请求会直接发送给自定义 router 进行处理。 |
2
acoldfox 2017-04-14 18:47:11 +08:00
为什么不用框架
|
4
zhujinliang 2017-04-14 18:56:28 +08:00 1
最早的 web 就是一个 URL 对应一个文件
后来有了动态页面,从 cgi 到 asp 到 php ,也都是这个套路,一个 URL 还是对应的磁盘上的一个文件去处理它,只不过实际内容是程序输出的 然而现在有人觉得这样丑,不够高大上,没有逼格(好好好,我知道你们的借口是不方便开发,不够 MVC ) 那怎么办, fastcgi 表示我只管调用 php 不关我事啊, nginx 说 rewrite 吧,把所有找不到文件的请求都 rewrite 到一个 php 文件上,后面还是原来的处理逻辑,那个 php 文件再判断到底是要干啥 同样坑爹的还有 pathinfo ,谁特么想出来的这馊主意 |
5
qhxin 2017-04-14 19:00:11 +08:00 via Android
PHP 前面有一个 webserver
|
6
jarlyyn 2017-04-14 19:03:47 +08:00
某种角度来说,这是 php 的坑之一。
合理的文件布局和 Nginx 可以避免一部分这个坑点。 |
7
zhujinliang 2017-04-14 19:04:59 +08:00
python 这种本来不是为 web 设计的语言,因为有网络能力,于是有人做了 http 库,语言内实现了 http 服务,也就是 nginx 的基本功能,既然是自己实现的,一来是想怎么搞就怎么搞,二来是本身语言内没有文件概念,所有的请求都没有对应的文件,必需要对请求的 URL 做路由处理
|
8
realpg 2017-04-14 19:13:14 +08:00
学习 CGI 模型去……
|
9
dangyuluo 2017-04-15 04:20:02 +08:00
一般这么做是为了隐藏 index.php ,和做 MVC 吧。
apache 读取到 http 头里的路径信息,然后首先添加上 index.php 作为统一入口交给 php 进行处理,然后 php 框架(如 CI )获取到 controller 和对应的 method 后,去找这个类并进行处理。 |