能不能检测URL的末尾不能有斜扛呀?
本帖最后由 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重复出现了,页面依然显示,但所有的操作都无效,这让用户很纳闷的)
当然跳转中的路径我可以换多个方法解决,正常操作就不会出错.现在问题是我可以保证我能正常操作,但不能保证用户也正常操作呀!假如他记住这一个页面,而手工输入,在末尾处还输了个斜扛,那问题就来了.手工输入只是情况之一,还有很多我们暂时想不到的情况会无形中多了这一扛.
所以我想程序中有没有办法自动判断并控制末尾不能出现这一扛. 所有转到控制器上的链接都用 site_url() 即可解决问题。
记住 CI 里必须用绝对路径,否则后患无穷。 本帖最后由 colee 于 2010-1-29 19:43 编辑
相对路径在适应项目变更上不是更灵活吗?
比如换域名、放到二级目录等,只要相对路径对了不管到哪都可以正常。而且在做AJAX时,也不会存在跨域的问题。
绝对路径在每次变更时都要进行一次处理,有些地方可能容易被遗忘呀。再者,用绝对路径,我本地没做路径重写,而远程服务器上可以使用重写。所以index.php在用绝对路径时不好处理。不过这倒是次要的,主要还是AJAX时,用绝对路径在FF会禁止 你所说的一切都可以用 site_url() 函数解决,
通过修改 config.php 中的 base_url 可以马上更改全站的 URL。
ajax 也有方法来处理 base_url
我自己的最佳实践就是 site_url() 和 base_url() 一起使用,在 iqwer.com 和 wonengbangni.com 上应用效果很好。 本帖最后由 colee 于 2010-1-29 19:54 编辑
谢谢 Hex
我PHP没学过,看得多了会一点,所以我不敢去改太多东西,尽可能在MVC中实现我想要的功能,如果改了base_url,那原有的路径函数我都无法使用了,所以才会想出如何自动去掉末尾的“/”这样使用相对路径就不会有问题了。
不过再深入想想,这种路径的设计模式不用绝对路径的话,还真的是后患无穷,因为不管后面段位有多少个他都能正常显示,相对路径也就失去作用了。
不过我想知道,当初他这么设计肯定是有想法的?能说一下这种方式的优点吗? (缺点已经很明显了:lol ) 你所指的是 URL 分段的优点?这个就很多了,最直观的就是有利于 SEO。
PS: 这里所指的“绝对路径”并不是把 URL 写死,而是用一个 site_url() 的 Helper 来生成,而这个函数的参数就是所谓的“相对路径”,所以你的站点搬到哪里都只需要修改一行配置而已,并且,部署 CI 唯一需要修改的配置变量就是 config.php 中的 base_url。
可以参考 http://codeigniter.org.cn/user_guide/helpers/url_helper.html 除了SEO,URL分段处理还有什么优点吗?
能举点例子最好了.先谢了.
那个绝路径,我只是不喜欢生成到前端的页面代码里,所有的A标签全是长长的http://……,那样页面变得太大了,浏览量大的页面太占流量资源了。 呵呵 CI 就是这种风格的,也许你能把 CI 改造成你喜欢的风格。
我想没什么特别的优点吧,和 query_string 没本质区别。 哎!颠覆我们的习惯,只能先这样用了。
页:
[1]