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