我通过多种方式搜索了我的问题,但似乎没有找到正确的案例,所以我在这里问。
我有一个 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 仍然以相同的方式构建(我清除了配置缓存)。
我应该怎么做才能让我的网站根据当前主机构建网址?
我不需要对这两个域进行任何其他更改。他们应该加载完全相同的所有内容,只有主机应该保留,而不是重定向到其他域。
事实证明有两个不同的问题。 我将在这里描述它们,因为有人可能正在处理其中之一。
首先,我在两个域上打印了
$_SERVER
变量的内容,并且两个域中的主机是相同的 - HTTP 域。
此问题来自 CloudFront 配置。结果发现 Host
标头已从 CF 分发行为中删除,因此 CF 将其替换为来源的值(来源是 http 域)。修复此问题后,$_SERVER
中的主机正确显示。
但是 url 构建的最初问题是我没有想到的其他问题。清除缓存以删除调试并在 HTTPS 域上看到正确的 url 后,我切换回 HTTP 域,现在看到所有 url 都指向 HTTPS 域。就在那时,我突然意识到这些域不仅共享配置,还共享缓存。我正在测试的页面上的大多数网址都来自具有缓存的函数,因此当缓存从一个域存储时,它们在另一个域上看起来是相同的。当我将主机包含在缓存键中时,一切正常。
希望这对其他人有帮助。
转到文件 .env 并设置 APP_URL=https://mysite-secure.example.com/ 并更改 布局或刀片文件中的 href={{asset('folder-path')}}