PHP Laravel - 允许用户使用自定义域名

eri*_*bae 6 php apache dns laravel

我已经浏览了几乎所有关于这个主题的页面,但我仍然有点困惑.

我有一个PHP Laravel 4.0网站,它位于

http://www.mywebsite.com

当用户注册时,每个用户都会获得自己的页面

http://user1.mywebsite.com

我在我的VPS DNS管理器(Linode)上通过通配符子域设置了上述内容.

在我的Laravel中,我有一个域路由,它可以获取子域并显示正确的用户页面.一切顺利.

现在,我想要实现的是让用户使用他们自己的域名并指向我们网站上的页面.

因此,如果用户注册

http://www.user1domain.com

我希望此域名指向http://user1.mywebsite.com

我不想重定向,但URL保留在http://www.user1domain.com(显然).

我知道像Tumblr这样的网站允许这样做.

我会采取什么措施来实现这一目标?以下是我在研究过程中想到的一些事情.

  1. 让用户将他们的自定义域"user1domain.com"指向我的VPS名称服务器(简单).

  2. 在我的结尾(这是我不知道的地方),我呢

    • 创建一个新的DNS条目?(在我的Linode VPS中,我会在"DNS管理器"和"添加域区域"中执行此操作)

    • 我正在使用Apache,所以我必须创建一个VirtualHost(就像我为所有其他网站所做的那样),这是否意味着我必须为每个想要使用自定义域的用户创建一个新的VirtualHost文件?

    • 如果不是VirtualHost,我如何实际指向我的Web应用程序文件夹?Apache别名?(我该如何设置?)

  3. 假设用户的域名现在"指向"我的Web应用程序,我现在如何在Laravel中选择它?(我猜我的做法和我的子域名一样)

谢谢你的时间.

Unn*_*wut 8

问题:创建新的DNS条目?(在我的Linode VPS中,我会在"DNS管理器"和"添加域区域"中执行此操作)

答:是的,您需要让用户将其域名指向您的域名服务器.您还必须将其域添加到DNS管理器中.

问题:我正在使用Apache,所以我必须创建一个VirtualHost(就像我为所有其他网站所做的那样),这是否意味着我必须为每个想要使用自定义域的用户创建一个新的VirtualHost文件?

如果不是VirtualHost,我如何实际指向我的Web应用程序文件夹?Apache别名?(我该如何设置?)

答:您可以为所有人设置一个虚拟主机配置,如使用默认虚拟主机中所述.

<VirtualHost _default_:80>
    DocumentRoot /var/www/mysharedsite
    # ...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

因此,请求服务器的所有域名都将由您唯一的代码库提供服务.

问题:假设用户的域名现在"指向"我的Web应用程序,我现在如何在Laravel中选择它?(我猜我的做法和我的子域名一样)

我现在可以想到两种方法.是的,您可以在子域路由上调整Laravel的文档,但是用于不同的域:

Route::group(array('domain' => 'user1domain.com'), function()
{
    Route::get('blog/{id}', 'BlogController@view');
});
Run Code Online (Sandbox Code Playgroud)

但我认为不同域之间的功能将完全相同,只有更改的数据,您可以使用始终使用:

Request::getHost();
Run Code Online (Sandbox Code Playgroud)

因此,您获取域,并可能将其映射到数据库中的website_id列以获取正确的内容.

确保在项目中仔细列出可接受的域名列入白名单.让所有域名都不是一个好主意.您也可以使用ServerNameServerAlias在您的虚拟主机中进行限制,但我认为这限制了让新用户拥有自己的域的灵活性.