service->url->getUrl 和 getCurrentBaseUrl两个方法在使用https的时候有点问题

问题咨询 · cougar999 · 于 3年前 发布 · 1443 次阅读

我使用的是服务是apache,域名指向cloudflare,https开到Full, 服务器这边也用了Let's Encrypt。

当使用到Yii::$service->url->getUrl这个方法的时候,返回的链接一直是http的,但是判断$_SERVER 的HTTPS是ON的状态,不知道是不是我服务器和https加密的问题,于是我只能再getUrl里面做了一些验证,开启http的时候强制把http改成https,这样就可以继续使用了

相同 getCurrentBaseUrl 也有这个问题。

而且我发现在getUrl方法里第三个参数是https,这个参数没有用到。是不是当初考虑到这个问题了?

共收到 5 条回复 问题提问
Fecmall#13年前 0 个赞

fecmall的https是自动的,不过目前检测是通过443端口来的,打开appfront/web/index.php可以看到

<?php
error_reporting(E_ALL & ~E_NOTICE & ~E_COMPILE_WARNING ); //除去 E_NOTICE E_COMPILE_WARNING 之外的所有错误信息
#ini_set('session.cookie_domain', '.fancyecommerce.com'); //初始化域名,
$http = ($_SERVER['SERVER_PORT'] == 443) ? 'https' : 'http';
$homeUrl = $http.'://'.$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['SCRIPT_NAME']), '\\/');

您可以打印一下这个$http变量是不是https,如果这里是https,那么Yii::$service->url->getUrl生成的也是https格式的url

关于getUrl函数您仔细追踪一下代码就明白了

Fecmall#23年前 0 个赞

关于你说的getUrl方法里第三个参数是https,这个是根据需要,强制生成格式化的url(https or http

cougar999#33年前 0 个赞

哦,原来如此,我去看下index里的

cougar999#43年前 0 个赞

我看了一下,果然,是80端口,不是443端口,但明明开了ssl,于是我只能改了验证方式 if (isset($_SERVER['HTTPS']) && (strcasecmp($_SERVER['HTTPS'], 'on') === 0 || $_SERVER['HTTPS'] == 1)) {

Fecmall#53年前 0 个赞

@cougar999 #4楼

嗯,您根据自己的情况,改一下吧index.php文件里面的代码吧

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics