yii中的createAbsoluteUrl问题

时间:2016-10-17 09:47:17

标签: php ajax yii https

我在网站上有一个ajax请求,它有如下代码:

"id": {
    "$t": "FULLURL"
},
… blablabla …
"title": {
    "type": "text",
    "$t": "test1"
},
… blablabla …
"gsx$articletitle": {
    "$t": "Viva la Grischa"
}

现在它在实时网站上运行良好。它有一个像https://example.com这样的域名。现在我必须将此站点移动到负载平衡服务器。所以我创建了像https://ww.example.com这样的域,并将该域与负载均衡器服务器链接起来。但现在使用 http 而不是 https 发送ajax请求。

我已检查documentation,并说明要使用架构(例如http,https)。如果为空,则将使用用于当前请求的架构。所以假设我使用这样的网址访问了网站:https://ww.example.com/index.php?r=controller/action那么它不应该接受https请求吗?

2 个答案:

答案 0 :(得分:1)

您的负载均衡器可能配置错误,无法传递HTTPS请求。 您的负载均衡器可能会收到HTTPS请求,但会通过HTTP将它们传递给您的应用程序服务器。因此,来自应用程序服务器的观点的请求是HTTP请求。

确定架构的函数是CHttpRequest::getIsSecureConnection,如下所示:

public function getIsSecureConnection() {
    return isset($_SERVER['HTTPS']) && (strcasecmp($_SERVER['HTTPS'],'on')===0 || $_SERVER['HTTPS']==1)
        || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strcasecmp($_SERVER['HTTP_X_FORWARDED_PROTO'],'https')===0;
}

要修复它,请确保您的负载均衡器在将请求传递给应用程序服务器时插入HTTP_X_FORWARDED_PROTO标头。

答案 1 :(得分:0)

您可以检查请求是否为secureRequest

$request = Yii::$app->request;

if (!$request->isSecureConnection) {
  // use http
} else {
  // force the use of https
}