| |
CodeIgniter默认url中是带有“index.php”这个字段的,不好看,不利于SEO,很多人想去掉它。网上和官方也有很多方法,大多是rewrite一下了事,这些方法的通病就是可以去掉"index.php"字段,但是加上后仍然能访问,甚至“http://****.com/index.php/index.php/index.php"这种url也照常可以访问,无形中给网站带来了安全隐患。并且在隐藏网站所用脚本语言的时候也不利,通过测试加上index.php后是否可以访问可以很轻易的探测出网站是否由php开发,是否使用了CI框架。为了以上安全性考虑,需要完全去掉index.php,即:加上后返回404页面。


查询了网上的资料,发现没有相关内容,阅读了一下CI的源码,发现不是CI的问题,而是web服务器导致的此问题。

课外小知识:对于/index.php/abc这种url,Apache和lighttpd会按"index.php?abc"来解释,而nginx会认为是请求名字是“index.php”的目录下的abc文件的内容。所以CI在nginx下不配置rewrite是无法运行的,而在Apache和lighttpd则正常。

课外小知识二:nginx里rewrite ^/(.*)$ /index.php?$1 last;来rewrite请求时,对于:/abc.abc这类请求,会rewrite成“index.php/abc_abc”,即会把“点”变成“下划线”,不清楚是为了什么。

课外小知识三:nginx配置文件里的rewrite规则不是只执行一次就完事的,是“执行一遍,假如没有碰到break,就按rewrite后的新路径再执行一遍,直到不再变化或者遇到break或者执行满10次报500错误退出”,所以单纯的用小知识二里的重写规则是不行的,需要在后面加上一句break,这样重写一遍后就不再执行了。

由上可得:在nginx配置文件里:
rewrite ^/(.*)$ /index.php?$1 last;
break;
即可完全屏蔽index.php访问。
by snooda | 分类: 默认分类 | 评论(1) | 引用(0) | 阅读(4735)
Anoymous
2011/03/31 14:33
nnnnnn
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]