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

Using one Laravel app from different domains - building urls issue

我用很多方法搜索了我的问题,但我似乎没有找到正确的案例,所以我在这里问。

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

更具体地说,假设我有 http://mysite-notsecure.example.comhttps://mysite-secure.example.com。 当我打开 http://mysite-notsecure.example.com 时,一切正常,没有任何问题。但是,当我打开 https://mysite-secure.example.com 时,网站会加载,app.jsapp.css 等文件也会加载正确的主机,但字体、图像、链接等内容会从 [=11= 加载].

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

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

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

首先,我在两个域上打印了 $_SERVER 变量的内容,并且两个域中的主机是相同的 - HTTP 域。 此问题来自 CloudFront 配置。原来 Host header 已从 CF 分发行为中删除,因此 CF 将其替换为来源的值(来源是 http 域)。修复此问题后,$_SERVER 中的主机正确显示。

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

希望这对其他人有帮助。