设为首页
收藏本站
Archiver
用户
登录
入住
用户名
Email
自动登录
找回密码
密码
登录
入住 CI 中国社区
首页
返回 CodeIgniter 中国首页
论坛
BBS
导读
Guide
个人主页
Space
中文手册
搜索
CodeIgniter 搜索引擎
视频教程
案例
任务
搜索
搜索
本版
帖子
用户
设为首页
收藏本站
Archiver
开启辅助访问
切换到宽版
日志
相册
分享
记录
CodeIgniter4
CodeIgniter3
CodeIgniter2
帖子
好友
道具
勋章
收藏
任务
记录
留言板
设置
我的收藏
退出
腾讯QQ
微信登录
CodeIgniter 中国开发者社区
»
论坛
›
CodeIgniter 开发
›
CodeIgniter 问答求助
›
关于CI路由的一个重要的问题
返回列表
查看:
7590
|
回复:
7
[讨论/交流]
关于CI路由的一个重要的问题
[复制链接]
ares333
ares333
当前离线
积分
392
IP卡
狗仔卡
发表于 2009-7-30 00:24:25
|
显示全部楼层
|
阅读模式
谁都知道index.php是CI的入口 router类分析uri分配控制器以实现路由功能
在明白这些之前有一个很重要的问题很困惑
http://localhost/test.php/xyz 显示test.php的内容
http://localhost/test.htm/xyz 显示无法找到该页
服务器是wamp
test.php内容如下:
<?php
echo "test.php";
?>
就因为test.php是动态页而test.htm是静态页!?????????????????
如果/xyz是参数那么怎么获得,我测试了一下$_GET,$_POST,$_REQUEST都不能捕获/xyz,感觉这个'/'真诡异,到底是什么原理
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
visvoy
visvoy
当前离线
积分
1342
IP卡
狗仔卡
发表于 2009-7-30 04:36:17
|
显示全部楼层
建议阅读system/libraries/uri.php和system/libraries/router.php源码,
论坛有人发布了带中文注解的CI,看过你就知道为啥了
回复
支持
反对
使用道具
举报
显身卡
ares333
ares333
当前离线
积分
392
IP卡
狗仔卡
楼主
|
发表于 2009-7-30 09:17:05
|
显示全部楼层
本帖最后由 ares333 于 2009-7-30 09:20 编辑
谢谢版主指点 不过我不是这个意思
我是想知道为什么以test.php结尾的url后面可以跟一个'/'加任意字符串而不会现无法找到该页
但是以test.htm结尾的url后面跟一个'/'加任意字符串就显示无法找到该页
当然test.php只输出一行字符串,没有任何其他功能
http://localhost/test.php/xyz我的理解是 这个网址访问test.php文件夹下的xyz文件(如果建立一个名为test.php文件夹 里面放一个xyz文件确实也能访问到这个文件)
比如有一个新的语言叫htmlx,我也想实现和CI一样的框架 但是如果我想用test.htmlx(相当于index.php,但是不实现任何功能)作为入口 但是访问
http://localhost/test.htmlx/xyz 显示无法找到该页,那么这个框架根本不可能实现
归根到底就是一句话 为什么.php结尾的url后面可以跟'/'加任意字符串而不会对访问产生任何影响而.htm(.html)结尾的url就不行
回复
支持
反对
使用道具
举报
显身卡
visvoy
visvoy
当前离线
积分
1342
IP卡
狗仔卡
发表于 2009-7-30 09:27:32
|
显示全部楼层
http://localhost/test.html ,如果没有rewrite,他默认是访问html文件,不会加载php的东西
http://localhost/test.html/ ,表示要访问test.html目录,因为没有这个目录,所以显示404
http://localhost/test.php/xyz ,在CI中,如果你的CI入口是test.php,那么/xyz表示要调用xyz控制器,action是默认index()
为什么http://localhost/test.php/不报错呢?因为此时扩展名是.php,由php解析,至于CI怎么利用/,请参考源码
回复
支持
反对
使用道具
举报
显身卡
visvoy
visvoy
当前离线
积分
1342
IP卡
狗仔卡
发表于 2009-7-30 09:28:42
|
显示全部楼层
据说某些蹩脚的服务商会将http://localhost/test.php/认成目录,不过俺还没遇到过这种情况
回复
支持
反对
使用道具
举报
显身卡
ares333
ares333
当前离线
积分
392
IP卡
狗仔卡
楼主
|
发表于 2009-7-30 10:36:44
|
显示全部楼层
谢谢版主
看了你的回复我这样来理解
以wamp为例
Apache肯定保存一个列表记录可以识别的各种后缀 .php .htm包含其中。
有一个请求比如http://localhost/test.php/xyz Apache遇到可识别的后缀.php,然后寻找test.php文件,找到了就交给PHP模块处理(因为是动态页,Apache不会解析后面的地址),所以后面的/xyz不影响,如果没找到test.php文件就认为他是一个目录,继续寻找test.php目录下的xyz文件(wamp可以识别test.php这样的目录)
但是http://localhost/test.htm/xyz就不同了 Apache遇到test.htm,(因为不是动态页,没有其他模块可以调用,所以继续解析url),然后认为浏览器请求的是test.htm目录下的xyz文件
上面这一切没有涉及到CI,但是没有这样的机制CI不可能实现路由(因为没有这样的机制http://localhost/index.php/hello这样的地址只能被认为是index.php目录中的hello文件)
个人理解,希望高手指教
回复
支持
反对
使用道具
举报
显身卡
Hex
Hex
当前离线
积分
50179
IP卡
狗仔卡
发表于 2009-7-30 11:26:50
|
显示全部楼层
说这么多,实际上就是一个 PATH_INFO,index.php/xxxxx/xxx 这后面的就是一种 PATH_INFO 参数,并且不是所有情况下都有这个参数,需要服务器配合。
静态文件无法接收 PATH_INFO,我看是服务器本身的策略造成的,一个静态文件接收到 PATH_INFO 有什么用?所以说静态文件就是 404 错误了。
回复
支持
反对
使用道具
举报
显身卡
ares333
ares333
当前离线
积分
392
IP卡
狗仔卡
楼主
|
发表于 2009-7-30 13:48:44
|
显示全部楼层
本帖最后由 ares333 于 2009-7-30 13:55 编辑
7#
Hex
正解!
very 3Q
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
入住 CI 中国社区
本版积分规则
发表回复
回帖后跳转到最后一页