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

时间:2014-06-20 12:59:22

标签: php apache laravel dns

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

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

http://www.mywebsite.com

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

http://user1.mywebsite.com

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

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

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

因此,如果用户注册

http://www.user1domain.com

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

我不想要重定向,但网址仍然保留在http://www.user1domain.com(显然)。

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

我可以采取哪些措施来实现这一目标?以下是我在研究期间想到的一些事情。

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

  2. 在我的结尾(这里我不知道),我

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

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

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

  3. 假设用户的域名现在“指向”我的网络应用程序,我现在如何在Laravel中选择它? (我猜我会像对待子域一样这样做)

  4. 感谢您的时间。

2 个答案:

答案 0 :(得分:8)

  

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

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

  

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

     

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

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

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

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

  

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

我现在可以想到两种方法。是的,您可以在Sub-Domain Routing上修改Laravel的文档,但改为使用不同的域:

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

但我认为不同域之间的功能将完全相同,只有数据发生变化,您可以随时使用:

Request::getHost();

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

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

答案 1 :(得分:0)

基本上,对于创建的动态通配符,您只需要这个..

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

    *.mywebsite.com IN A 192.168.1.1
    
  2. 设置您的服务器名称&amp;用于VirtualHost中域名的Apache Confuff

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

    ipconfig/flushdns 
    
  4. 希望这个帮助