2017-11-16 15:56:15     分类: Php
摘要: 最近使用Lumen的时候发现使用$request->url()无法获得https链接,追踪了老半天代码……

包含url() route() action()……所有和路径相关的方法

这是由于Laravel/Lumen 判断是否是https仅使用了strtolower($_SERVER['HTTPS']) != 'off'导致的

如果在Nginx下没有传递HTTPS fastcgi参数,则一直会被认为是http请求。Apcache不存在此问题

可以给nginx配置增加 'fastcgi_param HTTPS $https if_not_empty;'配置

fastcgi_pass  unix:/tmp/php-cgi.sock; 
fastcgi_param HTTPS $https if_not_empty;

也可以在AppServiceProvider.php方法中增加设置

public function boot() 
{
   if ($this->is_https()) {
        $_SERVER['HTTPS'] = 'ON';
    }
}

protectd function is_https() {
    if ( isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') {
        return true;
    } elseif ( isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) {
        return true;
    } elseif ( !empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') {
        return true;
    }
    return false;
}

即为代码端判断是否是https请求后,授田添加server的HTTPS参数


文章标签: