这里下载好最新的CodeIgniter 4框架,并在windows的IIS中配置好php 8.2的环境。
写了一个简单的控制器路由,进行测试。
发现控制路由无效,总是返回的默认控制器的首页。
使用 phpinfo 查看了一下php的环境变量,发现是缺少了 REQUEST_URI 变量值。
写了一个简单的控制器路由,进行测试。
发现控制路由无效,总是返回的默认控制器的首页。
使用 phpinfo 查看了一下php的环境变量,发现是缺少了 REQUEST_URI 变量值。
解决方法两种:
1、通过代码处理修复 REQUEST_URI 变量值。将如下代码添加到 public/index.php 页面开头:
[复制到剪贴板] |
if (!isset($_SERVER['REQUEST_URI']))
{
set_request_uri();
}
function set_request_uri(){
// IIS 中使用了Url重写插件,可以直接利用重写的变量值
if (isset($_SERVER['HTTP_X_ORIGINAL_URL'])) {
return $_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_ORIGINAL_URL'];
}
//如果是命令模式执行的,可以通过参数修复
if (isset($_SERVER['argv']))
{
$uri = $_SERVER['PHP_SELF'] .(empty($_SERVER['argv'])?'':('?'. $_SERVER['argv'][0]));
}
else//正常web访问情况
{
$uri = $_SERVER['PHP_SELF'] .(empty($_SERVER['QUERY_STRING'])?'':('?'. $_SERVER['QUERY_STRING']));
}
//修复变量值
return $_SERVER['REQUEST_URI'] = $uri;
}
这样就可以了,在缺少REQUEST_URI变量时自动修复。
2、第二种方式,修改iis-php的执行模块,由 CgiModule 修改为 FastCgiModule。
FastCgiModule 本身就包含了 REQUEST_URI 变量,不需要变更代码。