如何在IIS 8.0服务器上移除CodeIgniter URL中的index.php
我来帮你搞定这个问题!之前在IIS 8上部署CodeIgniter 3的时候,也碰到过一模一样的移除index.php的难题,下面是亲测有效的分步解决方案:
解决方案:在IIS 8中移除CodeIgniter 3.1.7 URL里的index.php
第一步:先调整CodeIgniter的核心配置
首先得把CI自身的配置改对,否则后续的URL重写也白搭。打开application/config/config.php,找到这两个关键配置项:
- 将
$config['index_page'] = 'index.php';修改为$config['index_page'] = ''; - 把
$config['uri_protocol']设置为'REQUEST_URI',也就是$config['uri_protocol'] = 'REQUEST_URI';
第二步:配置IIS的URL Rewrite规则
如果你已经安装了URL Rewrite插件,按以下步骤操作:
- 打开IIS管理器,选中你的目标网站,双击右侧面板里的URL Rewrite图标
- 在右侧“操作”栏点击添加规则,选择空白规则后点击确定
- 填写规则详情:
- 规则名称:随便起个好记的,比如
Remove Index.php - 匹配URL区域:
- 请求路径:选
Matches the Pattern - 使用:选
Regular Expressions - 模式:输入
^(.*)$ - 忽略大小写:勾选上
- 请求路径:选
- 条件区域:点击添加按钮,设置两个条件:
- 第一个条件:输入
{REQUEST_FILENAME},检查类型选Is Not a File,点击确定 - 第二个条件:输入
{REQUEST_FILENAME},检查类型选Is Not a Directory,点击确定
- 第一个条件:输入
- 操作区域:
- 操作类型:选
Rewrite - 重写URL:输入
index.php/{R:1} - 追加查询字符串:勾选
- 停止处理后续规则:勾选
- 操作类型:选
- 规则名称:随便起个好记的,比如
- 点击应用保存规则
嫌手动配置麻烦的话,也可以直接在网站根目录创建web.config文件,把下面的代码复制进去(如果已有web.config,把rewrite节点合并到现有配置里就行):
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="Remove Index.php" stopProcessing="true"> <match url="^(.*)$" ignoreCase="false" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="index.php/{R:1}" appendQueryString="true" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
第三步:排查可能的坑点
如果设置完还是没生效,检查这几个地方:
- 确认URL Rewrite插件已经正确安装并启用:在IIS管理器的“模块”里能看到
RewriteModule就没问题 - 网站的应用程序池权限要足够,确保能读取web.config文件
- 检查CI的
base_url配置:$config['base_url']要设置成你的网站根URL,比如http://localhost/,别留空 - 先测试默认的Welcome控制器,访问
http://localhost/welcome看是否能正常加载
内容的提问来源于stack exchange,提问作者Dip
相关产品推荐
相关产品推荐

