很显然,默认情况下,index.php
在URL地址段中的存在一定程度上影响了URL的简洁和SEO的进行。我们可以通过下面本文介绍的方法来去 掉这个讨厌的index.php。
你或许已经注意到在CodeIgniter用户手册中,已经存在关于此问题的解决方法。但官方提供的这个.htaccess配置, 并不是所有时候都能解决问题。本文现在给出一个更完善的解决方案。
注意:在继续之前,请确认你的主机支持.htaccess配置。其中,如果Apache作为Web服务器,需要 开启mod_rewrite模块的支持;如果将IIS作为Web服务器,则需要额外安装ISAPI_Rewrite拓展。
打开httpd.conf
文件修改所有AllowOverride
为All
,所有`Allow from none` 改为 `Allow from all`,就像下面这样:
<Directory "D:/usr/local/www"> AllowOverride all Options +FollowSymLinks +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory>
然后,在 CI 根目录下新建立一个文件.htaccess
。
在里面这样写:
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/$1 [L] #不同的框架有细微区别,也可能需要的是index.php/$1
还要修改 config.php 这个文件中的$config['index_page']
的值为””:
/* |————————————————————————– | Index File |————————————————————————– | | Typically this will be your index.php file, unless you’ve renamed it to | something else. If you are using mod_rewrite to remove the page set this | variable so that it is blank. | */ $config['index_page'] = "";
题外话
有些PHP框架传参的方式并没有问号,因此可能需要修改.htaccess
的RewriteRule
结果为^(.*)$ /index.php/$1 [L]
,ThinkPHP便是没有?
的。