具有子域的Laravel应用程序,可以通过CNAME链接到其他域

时间:2018-03-03 16:56:24

标签: php laravel subdomain

我正在尝试创建一个类似于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设置为shops.myshopify.com域。

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

谢谢,尼克

1 个答案:

答案 0 :(得分:0)

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

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

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

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