如果你刚接触ci不久又或者刚刚研读ci的使用手册的话,关于如何有效删除url中index.php以使url看起来更友好美观的问题,可能是你面对的第一个较为复杂的问题!本贴不是原创,而是一个各种意见的综合!但本帖提出的解决方案可以有效解决apache和iis两种环境下的配置
如果你刚接触ci不久又或者刚刚研读ci的使用手册的话,关于如何有效删除url中index.php以使url看起来更友好美观的问题,可能是你面对的第一个较为复杂的问题!本贴不是原创,而是一个各种意见的综合!但本帖提出的解决方案可以有效解决apache和iis两种环境下的配置问题,同时也可以有效,避免部分虚拟linux虚拟主机上可能出现的no input file specified错误!如果你还在为index.php的问题而苦苦寻觅解决方案,或许这里会是你的最后一站!
官方解决方案
默认情况下,index.php 文件将被包含在你的 url 中:
example.com/index.php/news/article/my_article
你可以很容易的通过 .htaccess 文件来设置一些简单的规则删除它。下面是一个例子,使用“negative”方法将非指定内容进行重定向:
html复制代码
rewriteengine on
rewritecond $1 !^(index\.php|images|robots\.txt)
rewriterule ^(.*)$ /index.php/$1 [l]
复制代码
注意:如果你的项目不在根目录请把上面这一句改为:rewriterule ^(.*)$ index.php/$1 [l]
在上面的例子中,可以实现任何非 index.php、images 和 robots.txt 的 http 请求都被指向 index.php。我的终极解决方案但在实践中,以上方案仅适用于与运行于apache环境下的服务器且并不具有充分的普遍适用性!当ci程序位于非根目录或位于某些虚拟主机上时,以上解决方案会引起”404错误”或”no input file specified”等错误.百度参考过相关问题的解放方案后,找到了一种具有通用性的有效删除url路径中index.php的方法,代码参考如下:
index位于根目录时,你可以在index.php所在的根目录里新建.htaccess文件并使用以下代码:
html复制代码
rewriteengine on
rewritecond $1 !^(index\.php|robots\.txt)
rewriterule ^(.*)$ /index.php?/$1 [l]
复制代码
当index.php不在根目录时,你可以在index.php所在目录里新建.htaccess文件并使用以下代码:
html复制代码
rewriteengine on
rewritecond $1 !^(index\.php|images|robots\.txt)
rewriterule ^(.*)$ /path_to_app/index.php?/$1 [l]
复制代码
注意把path_to_app换成你的index.php所在文件的目录.假设你的index.php放在根目录的tool子文件夹下,你可以这样写:
html复制代码
rewriteengine on
rewritecond $1 !^(index\.php|images|robots\.txt)
rewriterule ^(.*)$ /tool/index.php?/$1 [l]
复制代码
以上方案应该可以解决apache环境下如何有效删除url中index.php的问题,如果有其他问题,请评论或留言并留下一个有效的联系方式.我会尝试替您解决并将可能的解决方案及时通知您!
另外,关于iis环境下如何有效删除url中的index.php,可以参考这篇文章:
iis7.5 去除 index.php web.config配置文件参考文章:如何删除url中index-php的终极解决方案