Laravel 5子域名网站是否作为新项目托管?

时间:2015-05-14 00:49:30

标签: laravel laravel-5

我有这个问题,我无法决定什么是什么,什么是最好的。希望有人能给我一些解释,以澄清我的困惑。

所以在这里,我有一个非常大的网站。目前正在Yii Framework上运行,我正在将其迁移到L5 Framework。该网站有几个子站点结构,如下例所示:

1) www.example.com
2) www.example.com/{username}
3) explore.example.com
4) explore.example.com/{organization}
5) connect.example.com
6) coin.example.com
7) m.example.com
8) e3.example.com

所以当前的托管方法是使用1个项目来托管所有内容。问题是,如果其中一个子站点由于某种原因被禁用,整个网站将需要停止,代码禁用该站点并再次部署整个站点。

回到L5框架,我注意到我可以在laravel中执行相同操作,使用routes.php中的以下路由方法在一个项目中托管所有内容:

Route::group(['domain' => '{account}.myapp.com'], function()
{

    Route::get('user/{id}', function($account, $id)
    {
        //
    });

});

同样的问题再次出现,如果有一个要禁用的子站点,我需要对禁用站点进行编码并重新部署整个站点。所以我在想是否将新项目中的每个子站点作为一个模块托管是可行的,这样如果对该子站点进行任何更改,它只会影响该特定模块而其他模块保持运行。

此外,我还想问一下,如果我将其作为一个单独的项目托管,我的网站要求用户登录才能导航到任何页面或应用程序。那么如何告诉其他模块用户登录的位置,一切都可以照常进行?

最后当然,如果有人有任何其他建议或方法,请随时启发我。我的主要动机是实现:

1) Maximum development flexibility
2) Fail tolerance
3) Sub sites can share the same login with the main website 
(You are only require to login at the main page and you will be authorized
to use the rest of the web application)

谢谢。

1 个答案:

答案 0 :(得分:2)

我猜,答案为时已晚。不过,它可能对其他人有帮助。

今天我自己也遇到了类似的困境 - 我应该为我的应用程序的公共站点和管理站点使用子站点或单独的应用程序。

起初似乎我应该有单独的应用程序,以避免在我只希望升级其中一个网站时关闭bith网站。但是我不想在我的存储库中重复所有Laravel样板代码。

然后我发现实际上我可以将所有内容实现为子网站,但我可以将Laravel应用程序部署到多个子域。因此,存储库中将有单个应用程序,但我将为每个子域提供不同的副本。

缺点 - 将为每个已部署的站点复制控制器,视图(以及某些特定于站点的模型)的代码。这对于一个小型网站来说不是问题 - 只是一堆未使用的文件。但是如果我想要一个干净的解决方案,我可以实现一些模块化结构,并在部署期间引入特定于站点的MVC。我想这是另一个话题。模块化Laravel应用程序有一些第三方解决方案。当然,模块化解决方案增加了复杂性和维护性,因此我对服务器上的文件重复没有任何意义,如果这对您来说不是问题。

关于身份验证 - 我没有尝试使用Laravel,但我有在纯PHP应用程序中为顶级域实现cookie的经验。实质上,您可以将会话cookie配置为对所有子域有效,然后用户只需在您的任何站点中登录一次。这似乎是Laravel的有效解决方案: Persisting sessions across subdomains in Laravel 5

只需将顶级域名设置为.example.com,理论上您应该很高兴。出于开发目的,我将此值存储在.env中。

相关问题