有效删除CI框架中URL中的index.php 朱雀 2020-09-12 01:49 703阅读 0赞 官方解决方案 默认情况下,index.php 文件将被包含在你的 URL 中: example.com/index.php/news/article/my\_article 你可以很容易的通过 .htaccess 文件来设置一些简单的规则删除它。下面是一个例子,使用“negative”方法将非指定内容进行重定向: RewriteEngine on RewriteCond $1 !^(index\.php|images|robots\.txt) RewriteRule ^(.*)$ /index.php/$1 [L] 注意:如果你的项目不在根目录请把上面这一句改为:RewriteRule ^(.\*)$ index.php/$1 \[L\] RewriteCond $1 !^(index\\.php|images|js|css|robots\\.txt) 上面的代码意思是排除某些目录或文件,使得这些目录不会 rewrite 到 index.php 上,这一般用在图片、js、css 等外部资源上。也就是说非 PHP 代码都要排除出去。(这里我排除了 images 目录和 robots.txt 文件,当然 index.php 也应该被排除) 我的终极解决方案 但在实践中,以上方案仅适用于与运行于Apache环境下的服务器且并不具有充分的普遍适用性!当CI程序位于非根目录或位于某些虚拟主机上时,以上解决方案会引起”404错误”或”no input file specified”等错误.百度参考过相关问题的解放方案后,找到了一种具有通用性的有效删除URL路径中index.php的方法,代码参考如下: index位于根目录时,你可以在index.php所在的根目录里新建.htaccess文件并使用以下代码: RewriteEngine on RewriteCond $1 !^(index\.php|robots\.txt) RewriteRule ^(.*)$ /index.php?/$1 [L] 当index.php不在根目录时,你可以在index.php所在目录里新建.htaccess文件并使用以下代码: 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子文件夹下,你可以这样写: 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的终极解决方案
还没有评论,来说两句吧...