菜鸟有个白痴问题求救,请不吝赐教,非常感谢!
浏览器向http://www.myserver.com/abc/def 发出HTTP请求。 服务器使用一个框架将该URL映射到classes/ Handlers / ghi.php,ghi.php里include了views / jkl.html。 现在在浏览器中显示的视图是views / jkl.html中的HTML代码。
那么现在是哪个URL显示在浏览器的地址栏中呢?为什么?仍然是http://www.myserver.com/abc/def? 还是http://myserver.com/jkl.html?
浏览器访问时,会携带url 地址给服务端的(http协议),web服务器(主要有两个nginx 和apache)通过url分解出域名和路由部分(当然不止这两个还会有协议,参数,锚等),php 通过路由解析(一般是router类做路由解析工作),指定到某个类下的某个方法(有些框架的路由是可以重定向的配置)。
说到底其实就是正则匹配,匹配到了就处理接下来的工作。
感谢回复!但是能不能就这个题目详细解答下?然后我再根据解答自己理解一下。非常感谢
@jinleiDev: 我只是给了你一个思路而已,具体的详解还是需要看你自己框架的结构。
你提出的两个问题没人能回答的了你,因为没人知道你的情况。是具体不了的。但是有一点可以确定就是你的路由无论怎么写都只会进入 入口文件 index.php。
在index.php中调用解析你的路由的类,路由类 根据解析(正则解析) 应该进入的控制层(应该是你的Handlers里面的某个php文件)。
控制层中导入了视图文件(如:view/jkl.html)
@xiaobaiskill:
非常感谢回复!
我明白这一点,就是控制层中Handlers / ghi.php导入了视图文件(如:view/jkl.html)。然后把这个htlm文件返回给浏览器,那么现在哪个URL显示在浏览器的地址栏中?
仍然是http://www.myserver.com/abc/def? 还是http://myserver.com/jkl.html?
非常感谢!
@jinleiDev:
举一个列子:
比方说我配置了路由
/news/:id => /news/detail/:id (解释: /new/detail/:id 是news.php 下news类的detail函数内部接收参数id)
那么我以后所有的访问/news/:id 的路由都后被解析成/news/detail/:id ,然后通过解析的结果include news.php,然后实例话news类调用detail方法 传id的值
如:http://www.myserver.com/news/12 实际的路由是http://www.myserver.com/news/detail/12,通过这个路由,然后通过“/” 分段 ,news 指的是 news.php和里面的news 类.detail 就是news 类里面的方法.id 就是需要传的参数.
如果没有配置路由,那么只能通过 http://www.myserver.com/news/detail/12访问, 路由解析时在通过“/” 分段.一步一步引入文件实例化类调用方法.
另外多说一点,路由怎么写都是要进入入口文件index.php 的,进入之后获取路由数据再进行解析.
@jinleiDev: 如果你们的路由解析后都会调用ghi.php 的,那么有可能就是http://myserver.com/jkl.html?,但是没有看到内部具体的,所以不好回答