欢迎光临 Rick 's BLOG
日志首页  | C# .Net编程  | 原创作品  | 生活点滴  | C\C++相关  | 多媒体相关※ERMP  | VB相关  | 其它运维与编程  |  留言簿
NGINX配置ssl证书 Windows IIS环境配置CodeIgniter 4 的网站环境
多云  windows IIS中CGI-php缺失REQUEST_URI导致路由无效
[ 发布日期:1年前 (2023-11-13) ]   [ 来自:本站原创 ] [分类:其它运维与编程]
这里下载好最新的CodeIgniter 4框架,并在windows的IIS中配置好php 8.2的环境。
写了一个简单的控制器路由,进行测试。

发现控制路由无效,总是返回的默认控制器的首页。
使用 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 变量,不需要变更代码。

引用通告地址 (0):
复制引用地址https://www.rickw.cn/trackback/258
复制引用地址https://www.rickw.cn/trackback/258/GBK
[ 分类:其它运维与编程  | 查看:265 ]

暂时没有评论,快来发表一个评论吧。
发表评论
作者:   用户:[访客] 
评论:

表  情
禁止表情 | 禁止UBB | 禁止图片 | 识别链接
对不起,你没有权限上传附件!
验证:
 
PoweredBy R-Blog V1.00 © 2004-2024 WWW.RICKW.CN, Processed in second(s) , 7 queries    京ICP备17058477号-5