php sql判断l列的存在,thinkphp 模块不存在:404

遇到的问题是:在thinkphp5.0框架下,出现错误----模块不存在:404?

bfebd411fc26a16018c45e54d249be83.png

问题跟踪分析:

不管是打断点还是var_dump,都可以分析到 Request.php 下的函数

/**

* 获取当前请求URL的pathinfo信息(含URL后缀)

* @access public

* @return string*/

public function pathinfo()

{if (is_null($this->pathinfo)) {if (isset($_GET[Config::get('var_pathinfo')])) {//判断URL里面是否有兼容模式参数

$_SERVER['PATH_INFO'] = $_GET[Config::get('var_pathinfo')];unset($_GET[Config::get('var_pathinfo')]);

}elseif(IS_CLI) {//CLI模式下 index.php module/controller/action/params/...

$_SERVER['PATH_INFO'] = isset($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : '';

}//var_dump($_SERVER);exit();

// 分析PATHINFO信息

if (!isset($_SERVER['PATH_INFO'])) {foreach (Config::get('pathinfo_fetch') as $type) {if (!empty($_SERVER[$type])) {$_SERVER['PATH_INFO'] = (0 === strpos($_SERVER[$type], $_SERVER['SCRIPT_NAME'])) ?

substr($_SERVER[$type], strlen($_SERVER['SCRIPT_NAME'])) : $_SERVER[$type];break;

}

}

}$this->pathinfo = empty($_SERVER['PATH_INFO']) ? '/' : ltrim($_SERVER['PATH_INFO'], '/');

}return $this->pathinfo;

}

在 "分析PATHINFO信息" 中看到 断点输出 超全局变量 $_SERVER

beb83fda905a9c7b3dfcadd5d8e11de0.png

从代码逻辑上来分析,pathinfo的取值 是从 超全局变量中$_SERVER  以这些 ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'](从Config配置里获取)为key的值中获取,一旦获得值,终止,从上图可以看出,REQUEST_URI为key的值符合我们的逻辑,故有的解决方法是在配置的数组里加上REQUEST_URI,放在第一位,我最初也是这样来解决这个问题的。

d51faa2ddafba15420b9e1cf5808d66d.png

在设置好后,确实页面可以访问了,

d58b19266176e9ff940031e6d0ba13a5.png

但是返回的状态码竟然是404.

看来问题还是得回到超全局变量 $_SERVER 来,为什么他的这些参数['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL']是 404,延伸到 超全局变量 $_SERVER 是怎么来的?

超全局变量 $_SERVER 是怎么来的 这个问题,我也不是很了解,只是在网上了解到和Apach或者Nginx有关(看你的服务部署情况),我的是Apach。

thinkphp和Apache的配置相关的话,就是public下的.htaccess文件

Options +FollowSymlinks -Multiviews

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([^(Public/)]+.*)$ index\.php [L,E=PATH_INFO:$1]

和thinkphp官方的对比下,

https://www.kancloud.cn/manual/thinkphp5/177576

RewriteRule ^([^(Public/)]+.*)$ index\.php [L,E=PATH_INFO:$1]

就是这个的问题,改为

RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]

这个问题就从根本上解决了!!其他的不用去改变。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值