使用来自不同域的一个 Laravel 应用程序 - 构建 url 问题

问题描述 投票:0回答:2

我通过多种方式搜索了我的问题,但似乎没有找到正确的案例,所以我在这里问。

我有一个 Laravel 应用程序安装在服务器上,一切正常。该域仅设置为 HTTP,并从 AWS 进行配置。但是,我们需要另一个只能通过 HTTPS 运行的域。 HTTP 域指向服务器实例,HTTPS 域指向源自 HTTP 域的 CloudFront 分配。问题是,当我打开 HTTPS 域时,所有链接和图像都是从 HTTP 域加载的。

更具体地说,假设我有

http://mysite-notsecure.example.com
https://mysite-secure.example.com
。 当我打开
http://mysite-notsecure.example.com
时,一切正常,没有任何问题。但是,当我打开
https://mysite-secure.example.com
时,网站会加载,
app.js
app.css
等文件也会使用正确的主机加载,但字体、图像、链接等内容会从
http://mysite-notsecure.example.com
加载。

因为大多数url都是用

url()
函数构建的,我认为这个问题与
APP_URL
有关,它最初设置为
http://mysite-notsecure.example.com
,但是当我添加新域时,我将其设置为空(
APP_URL=
), 然而,url 仍然以相同的方式构建(我清除了配置缓存)。 我应该怎么做才能让我的网站根据当前主机构建网址? 我不需要对这两个域进行任何其他更改。他们应该加载完全相同的所有内容,只有主机应该保留,而不是重定向到其他域。

laravel dns host
2个回答
0
投票

事实证明有两个不同的问题。 我将在这里描述它们,因为有人可能正在处理其中之一。

首先,我在两个域上打印了

$_SERVER
变量的内容,并且两个域中的主机是相同的 - HTTP 域。 此问题来自 CloudFront 配置。结果发现
Host
标头已从 CF 分发行为中删除,因此 CF 将其替换为来源的值(来源是 http 域)。修复此问题后,
$_SERVER
中的主机正确显示。

但是 url 构建的最初问题是我没有想到的其他问题。清除缓存以删除调试并在 HTTPS 域上看到正确的 url 后,我切换回 HTTP 域,现在看到所有 url 都指向 HTTPS 域。就在那时,我突然意识到这些域不仅共享配置,还共享缓存。我正在测试的页面上的大多数网址都来自具有缓存的函数,因此当缓存从一个域存储时,它们在另一个域上看起来是相同的。当我将主机包含在缓存键中时,一切正常。

希望这对其他人有帮助。


-1
投票

转到文件 .env 并设置 APP_URL=https://mysite-secure.example.com/ 并更改 布局或刀片文件中的 href={{asset('folder-path')}}

© www.soinside.com 2019 - 2024. All rights reserved.