You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Yii2无法获取站点基础绝对URL问题求助

获取Yii2应用的完整基础域名URL

首先得明确Yii2里几个URL相关方法的定位——你之前尝试的方法大多是获取应用的路径前缀(相对于域名的部分),而非你需要的完整域名(协议+主机名),这就是为什么它们要么返回空,要么返回/dashboard的原因。

为什么之前的方法无法得到目标URL?

逐个拆解你试过的方法:

  • Yii::$app->request->baseUrl:返回应用相对于Web服务器根目录的路径。如果你的应用部署在服务器根目录下(比如Apache的DocumentRoot直接指向应用根目录),这个值就是空字符串;如果应用在子目录(比如/dashboard),正常应该返回/dashboard——你的输出是空,大概率是配置里request组件的baseUrl被手动设为空,或者服务器配置让Yii误以为应用在根目录。
  • Yii::getAlias('@web'):这个别名本质和baseUrl完全等价,所以结果自然一致。
  • Yii::$app->homeUrl:这是应用的首页路径,是可以在配置文件里自定义的(你这里显然配置成了/dashboard),和域名本身没有关系。
  • Url::base():默认返回相对路径的基础URL,和baseUrl效果相同;就算传入true参数(Url::base(true)),返回的也是主机名+应用路径,不是你要的纯域名。

正确获取目标URL的方法

你需要的https://sub.sampledomain.com当前请求的协议+主机名,Yii2的request组件直接提供了获取这个值的属性:

echo Yii::$app->request->hostInfo;

这个属性会自动识别当前请求的协议(http/https)并拼接主机名,正好是你需要的结果。

额外小技巧

如果之后需要组合域名和应用前缀(比如https://sub.sampledomain.com/dashboard),可以用hostInfo加上baseUrl

$fullAppBaseUrl = Yii::$app->request->hostInfo . Yii::$app->request->baseUrl;

内容的提问来源于stack exchange,提问作者Aljay

火山引擎 最新活动