【问题标题】:Using one Laravel app from different domains - building urls issue使用来自不同域的一个 Laravel 应用程序 - 构建 url 问题
【发布时间】:2022-02-04 17:13:02
【问题描述】:

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

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

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

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

【问题讨论】:

  • 更改您的链接以使用当前协议。格式为href="//assets/link-to-some_js.js" 双斜杠使用当前协议。

标签: laravel amazon-web-services dns amazon-cloudfront host


【解决方案1】:

原来有两个不同的问题。 我将在这里描述它们,因为有人可能会与其中一个打交道。

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

但 urls 构建的最初问题是我没有想到的其他问题。在清除缓存以删除调试并在 HTTPS 域上看到正确的 url 后,我切换回 HTTP 并看到所有 url 都指向 HTTPS 域。那是当我想到这些域不仅共享配置,还共享缓存。我正在测试的页面上的大多数 url 都来自一个带有缓存的函数,所以当缓存从一个域存储时,它们在另一个域上看起来是一样的。当我禁用缓存时,一切正常。

希望这对其他人有所帮助。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      相关资源
      最近更新 更多