允许用户使用自定义域名


PHP Laravel - Allow users to use a custom domain name

我几乎把能找到的关于这个主题的每一页都看了一遍,但我还是有点困惑。

我有一个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管理器"answers"添加域区域"中这样做)

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

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

  3. 假设用户的域名现在"指向"我的web应用程序,我现在如何在Laravel中拾取?(我猜我会这样做,我为我的子域做同样的方式)

谢谢你的时间。

问题:创建一个新的DNS表项?(在我的Linode VPS中,我会在"DNS管理器"answers"添加域区域"中这样做)

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

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

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

答案:您可以为所有人设置一个虚拟主机配置,如使用default vhosts中所述。

<VirtualHost _default_:80>
    DocumentRoot /var/www/mysharedsite
    # ...
</VirtualHost>

所以所有请求到你的服务器的域名将由你唯一的一个代码库提供服务。

问题:假设用户的域名现在"指向"我的web应用程序,我现在如何在Laravel中拾取它?(我猜我会这样做,我为我的子域做同样的方式)

我现在能想到两种方法。是的,你可以改编Laravel关于子域路由的文档,但要使用不同的域:
Route::group(array('domain' => 'user1domain.com'), function()
{
    Route::get('blog/{id}', 'BlogController@view');
});

但是我认为功能在不同的域之间是完全相同的,只是数据改变了,你可以使用:

Request::getHost();

所以你得到了域名,也许映射到数据库中的website_id列,以获得正确的内容。

确保您在项目中仔细地将可接受的域名列入白名单。让所有的域名都进来并不是一个好主意。您也可以通过在虚拟主机中使用ServerNameServerAlias来进行限制,但我猜这会限制让新用户拥有自己的域的灵活性。

上述答案建议将域名指向主要应用程序名称服务器。在大多数情况下,这不是理想的,因为您可能仍然希望使用其他子域/电子邮件与其他提供商。

所以一个带有应用程序IP的A记录是最好的情况,因为它让您的客户可以控制他们的域

对于创建的动态通配符你只需要这个…

  1. 将域(A记录)上的通配符设置为您的服务器ip地址

    *.mywebsite.com IN A 192.168.1.1
    
  2. 设置服务器名&serveralias Apache Conf for domain name in VirtualHost

    ServerName mywebsite.com
    ServerAlias mywebsite.com *.mywebsite.com 
    
  3. 清除窗口控制台上的dnscache

    ipconfig/flushdns 
    

希望对您有所帮助