CodeIgniter3部署到IIS服务器出现Bad Request错误如何解决
CodeIgniter3部署IIS返回Bad Request解决方案
1. 修正config.php核心配置
修改application/config/config.php内的以下参数:
- 把
$config['base_url']设置为IIS站点的实际访问地址,包含绑定的域名/IP和子目录路径(如有),不要留空或使用本地测试地址 - 把
$config['index_page']设置为空字符串'',移除默认的index.php后缀 - 必须把
$config['uri_protocol']设置为'REQUEST_URI',IIS下默认的AUTO参数大概率会出现路径识别错误 - 确认
$config['enable_query_strings']保持默认false,除非你的业务明确需要开启查询字符串路由
2. 配置IIS伪静态规则
CI默认的.htaccess规则IIS无法识别,需要在站点根目录(和入口文件index.php同级)新建web.config配置文件,写入以下内容:
注意不要把该文件放在application目录下,否则规则不会生效
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="CodeIgniter重写规则" stopProcessing="true"> <match url="^(.*)$" ignoreCase="false" /> <conditions logicalGrouping="MatchAll"> <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>
配置前确认IIS已经安装URL重写模块,这是伪静态规则生效的前提。
3. 路由配置校验
检查application/config/routes.php配置:
- 确认
$route['default_controller']对应的控制器存在,CI3要求控制器文件名全小写,类名首字母大写 - 先注释所有自定义路由,仅保留默认控制器、404路由测试基础访问是否正常,确认无误后再逐步恢复自定义路由
- 排查正则路由的规则错误,不规范的正则匹配会直接触发400错误
4. 目录权限配置
给以下目录授予IIS对应应用池用户的读写权限:
application/cacheapplication/logs
权限不足引发的写入错误也会间接返回400状态码。
5. 调试排查方案
如果以上配置完成仍报错,修改根目录index.php中的ENVIRONMENT参数为development开启CI调试模式,会显示具体的错误详情,可针对性解决问题。
内容的提问来源于stack exchange,提问作者Ricky Reza Muhammad
相关产品推荐
相关产品推荐

