为什么 PHP 写 web, url 需要重写规则?

2017-04-14 18:16:50 +08:00
 Gem
这几天看下 php ,发现 url 需要在 nginx 下重写规则(叫伪静态?不太懂),才能实现类似 python | ruby 下的 www.abc/list/1 这样直观的 url 表现形式,而 python|ruby 下写 web ,直接就是直观的 url 表现形式,没有什么规则重写。请教下大家,这是什么原因,谢谢。
2430 次点击
所在节点    程序员
9 条回复
zdkmygod
2017-04-14 18:28:19 +08:00
很简单啊,因为 PHP 自带一个 router 的实现,这个 router 实现的比较难用( url 直接对应到文件)。所以大家想用自定义 router 替代自带的 router 的话,首先就得把自带的 router 效果纠正过来,发送给自定义 router 。

而 Python 和 Ruby 不像 PHP 一样本身就是一个简单的框架, HTTP 请求会直接发送给自定义 router 进行处理。
acoldfox
2017-04-14 18:47:11 +08:00
为什么不用框架
Gem
2017-04-14 18:53:16 +08:00
@acoldfox 框架同样需要重写规则吧?看 laravel ,也是需要的,不过我对 php 不熟悉,不太清楚。
zhujinliang
2017-04-14 18:56:28 +08:00
最早的 web 就是一个 URL 对应一个文件
后来有了动态页面,从 cgi 到 asp 到 php ,也都是这个套路,一个 URL 还是对应的磁盘上的一个文件去处理它,只不过实际内容是程序输出的
然而现在有人觉得这样丑,不够高大上,没有逼格(好好好,我知道你们的借口是不方便开发,不够 MVC )
那怎么办, fastcgi 表示我只管调用 php 不关我事啊, nginx 说 rewrite 吧,把所有找不到文件的请求都 rewrite 到一个 php 文件上,后面还是原来的处理逻辑,那个 php 文件再判断到底是要干啥

同样坑爹的还有 pathinfo ,谁特么想出来的这馊主意
qhxin
2017-04-14 19:00:11 +08:00
PHP 前面有一个 webserver
jarlyyn
2017-04-14 19:03:47 +08:00
某种角度来说,这是 php 的坑之一。

合理的文件布局和 Nginx 可以避免一部分这个坑点。
zhujinliang
2017-04-14 19:04:59 +08:00
python 这种本来不是为 web 设计的语言,因为有网络能力,于是有人做了 http 库,语言内实现了 http 服务,也就是 nginx 的基本功能,既然是自己实现的,一来是想怎么搞就怎么搞,二来是本身语言内没有文件概念,所有的请求都没有对应的文件,必需要对请求的 URL 做路由处理
realpg
2017-04-14 19:13:14 +08:00
学习 CGI 模型去……
dangyuluo
2017-04-15 04:20:02 +08:00
一般这么做是为了隐藏 index.php ,和做 MVC 吧。
apache 读取到 http 头里的路径信息,然后首先添加上 index.php 作为统一入口交给 php 进行处理,然后 php 框架(如 CI )获取到 controller 和对应的 method 后,去找这个类并进行处理。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/354924

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX