用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3187|回复: 8
收起左侧

[已解决] 能不能检测URL的末尾不能有斜扛呀?

[复制链接]
发表于 2010-1-29 19:18:54 | 显示全部楼层 |阅读模式
本帖最后由 colee 于 2010-1-29 19:29 编辑

我发现用CI的URL的末尾,不管有无斜扛,都能正常访问,正因为这个问题,我在控制器里做页面跳转时,用相对路径让人很迷茫.

比如:
1、网址/CodeIgniter/index.php/ualscxga
2、网址/CodeIgniter/index.php/ualscxga/      (末尾多了一"/")
页面中A标签的路径: href="ualscxga/del/32"   (一个删除操作)

1中的A的指向是:网址/CodeIgniter/index.php/ualscxga/del/32  (可以正常删除)
而2中的A指向则是:网址/CodeIgniter/index.php/ualscxga/ualscxga/del/32   (ualscxga重复出现了,页面依然显示,但所有的操作都无效,这让用户很纳闷的)

当然跳转中的路径我可以换多个方法解决,正常操作就不会出错.现在问题是我可以保证我能正常操作,但不能保证用户也正常操作呀!假如他记住这一个页面,而手工输入,在末尾处还输了个斜扛,那问题就来了.手工输入只是情况之一,还有很多我们暂时想不到的情况会无形中多了这一扛.

所以我想程序中有没有办法自动判断并控制末尾不能出现这一扛.
发表于 2010-1-29 19:29:04 | 显示全部楼层
所有转到控制器上的链接都用 site_url() 即可解决问题。

记住 CI 里必须用绝对路径,否则后患无穷。
 楼主| 发表于 2010-1-29 19:36:31 | 显示全部楼层
本帖最后由 colee 于 2010-1-29 19:43 编辑

相对路径在适应项目变更上不是更灵活吗?
比如换域名、放到二级目录等,只要相对路径对了不管到哪都可以正常。而且在做AJAX时,也不会存在跨域的问题。

绝对路径在每次变更时都要进行一次处理,有些地方可能容易被遗忘呀。再者,用绝对路径,我本地没做路径重写,而远程服务器上可以使用重写。所以index.php在用绝对路径时不好处理。不过这倒是次要的,主要还是AJAX时,用绝对路径在FF会禁止
发表于 2010-1-29 19:42:10 | 显示全部楼层
你所说的一切都可以用 site_url() 函数解决,
通过修改 config.php 中的 base_url 可以马上更改全站的 URL。
ajax 也有方法来处理 base_url

我自己的最佳实践就是 site_url() 和 base_url() 一起使用,在 iqwer.com 和 wonengbangni.com 上应用效果很好。
 楼主| 发表于 2010-1-29 19:52:10 | 显示全部楼层
本帖最后由 colee 于 2010-1-29 19:54 编辑

谢谢 Hex
我PHP没学过,看得多了会一点,所以我不敢去改太多东西,尽可能在MVC中实现我想要的功能,如果改了base_url,那原有的路径函数我都无法使用了,所以才会想出如何自动去掉末尾的“/”这样使用相对路径就不会有问题了。
不过再深入想想,这种路径的设计模式不用绝对路径的话,还真的是后患无穷,因为不管后面段位有多少个他都能正常显示,相对路径也就失去作用了。

不过我想知道,当初他这么设计肯定是有想法的?能说一下这种方式的优点吗? (缺点已经很明显了 )
发表于 2010-1-29 22:43:40 | 显示全部楼层
你所指的是 URL 分段的优点?这个就很多了,最直观的就是有利于 SEO。

PS: 这里所指的“绝对路径”并不是把 URL 写死,而是用一个 site_url() 的 Helper 来生成,而这个函数的参数就是所谓的“相对路径”,所以你的站点搬到哪里都只需要修改一行配置而已,并且,部署 CI 唯一需要修改的配置变量就是 config.php 中的 base_url。

可以参考 http://codeigniter.org.cn/user_guide/helpers/url_helper.html
 楼主| 发表于 2010-2-1 13:56:34 | 显示全部楼层
除了SEO,URL分段处理还有什么优点吗?
能举点例子最好了.先谢了.

那个绝路径,我只是不喜欢生成到前端的页面代码里,所有的A标签全是长长的http://……,那样页面变得太大了,浏览量大的页面太占流量资源了。
发表于 2010-2-1 15:54:20 | 显示全部楼层
呵呵 CI 就是这种风格的,也许你能把 CI 改造成你喜欢的风格。

我想没什么特别的优点吧,和 query_string 没本质区别。
 楼主| 发表于 2010-2-1 17:27:07 | 显示全部楼层
哎!颠覆我们的习惯,只能先这样用了。

本版积分规则