【问题标题】:Laravel application with subdomains that can be linked to other domains via CNAMELaravel 应用程序的子域可以通过 CNAME 链接到其他域
【发布时间】:2018-03-03 16:56:24
【问题描述】:

我正在尝试创建一个类似于 Shopify 的应用程序架构。

我正在从 Forge 运行这个应用程序,并且我已经设置了通配符 DNS 工作所需的配置。

目前人们可以注册我的 Laravel Spark 应用程序,然后将在以下位置为他们动态创建一个子域:

Route::group(['domain' => '{company}.app.com'], function () {
    Route::get('/', 'SubdomainController@index');
});

因此,如果他们注册一个帐户并将公司名称设置为Company,那么他们将在company.app.com 创建一个子域。此子域返回一个包含与其帐户相关数据的视图(它几乎为我的用户返回了一个自定义网站)。

我想让用户能够将他们在company.app.com 的网站镜像到他们自己的域地址。我尝试在备用域的 GoDaddy 中设置掩码,我必须对此进行测试,但它似乎不起作用:( 我在控制台中收到此错误:

Refused to display 'http://company.app.com/' in a frame because it set 'X-Frame-Options' to 'sameorigin'.

所以我猜这绝对不是正确的做法。

在这件事发生后,我查看了其他公司如何管理这件事,看起来他们创建了一个 A 记录和 CNAME 指向他们应用程序的根目录。 Shopify's guide 解释说他们将 IP 添加为 A 记录,然后将 CNAME 设置为 shop.myshopify.com 域。

所以现在我想知道当请求登陆我的应用程序时,如何将请求指向正确的方向。因此,例如,如果流量达到random.com,并且它的A record 等于我的服务器IP,加上app.comCNAME,那么我如何处理请求并将其重定向到正确的子域,同时保持用户在他们的自定义域上?

谢谢,尼克

【问题讨论】:

  • 嗨,你找到解决办法了吗?

标签: php laravel subdomain


【解决方案1】:

比这容易得多。您的服务器将 X-Frame-Options 标头设置为 SAMEORIGIN,这意味着如果该框架位于您的域中,则来自您网站的内容只能在该框架内呈现。

您要么完全摆脱它,因此任何人都可以在任何网站上构建您的内容,或者您​​保存您的客户域并即时进行某种数据库查找,或者配置某种特定的 URL 供他们使用内容将哪些代理链接到您服务器上的目录,并具有部分 url,您可以将其捕获为变量以在服务器配置中使用。然后,您将标头设置为仅允许来自他们的域。

因此 embed.myapp.com/example.com 可以提供来自 example.myapp.com 的内容并添加标题

X-Frame-Options: ALLOW-FROM https://example.com/

【讨论】:

  • 感谢您的回复!我还有一个问题,Shopify 如何在不创建面具的情况下做到这一点?用户似乎可以将A名称更改为服务器IP,然后像这样创建一个CNAME:youtu.be/Boqh4MItf60?t=5m29s
  • 当我做同样的事情并将我的应用程序 IP 添加为 A 记录并将子域添加为 CNAME 时,它会显示我的应用程序的根域而不是子域:(
  • 这是一个例子(显然这些值是假的)。 image.ibb.co/iA2Qcn/Screen_Shot_2018_03_03_at_17_45_28.png
  • 对不起,我想我误解了你想要做什么。我的解决方案对于您的非技术型客户来说会更容易,您链接的视频反之亦然,因此 example.com 的所有者必须为 myapp.example.com 创建一条 A 记录并将其指向 example.myapp。 com
  • 换句话说,您不会将您的子域指向他们,而是将他们的子域指向您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
相关资源
最近更新 更多