【问题标题】:Hosting two different applications running on Laravel 4 on shared hosting在共享主机上托管两个在 Laravel 4 上运行的不同应用程序
【发布时间】:2013-10-11 08:03:33
【问题描述】:

我即将开始使用 Laravel4 开发一个站点,该站点将包含一个托管在子域上的 cms。我想知道是否有办法在两个应用程序之间共享主要的 Laravel 安装?

我在使用以下示例进行测试时取得了各种成功:Laravel full URL routing,但是我想将应用程序文件夹中的功能分开,并使用诸如 app_main、app_cms 之类的东西来保存相关的模型、视图和控制器对于那里的每个站点。

在如何设置 Laravel 来满足这种要求方面,我似乎找不到太多帮助,所以任何关于这方面的帮助都会很棒。

【问题讨论】:

    标签: php dns laravel


    【解决方案1】:

    我有一个多主机解决方案,登录 FTP 后包含以下文件夹:

    domaina.com
    domainb.com
    domainc.com
    

    如果我想在这些网站之间共享相同的 Laravel 代码, 我只是在同一级别创建“Laravel”文件夹,所以它看起来像这样:

    domaina.com
    domainb.com
    domainc.com
    laravel
    

    这个 'laravel' 文件夹包含除 'app' 和 'public' 目录之外的所有内容。

    我只是将“public”目录的内容放在“domaina.com”文件夹中(例如)。 打开“index.php”并调整这些行以匹配实际位置。 现在你可以走了

    require __DIR__.'/../bootstrap/autoload.php';
    
    $app = require_once __DIR__.'/../bootstrap/start.php';
    

    【讨论】:

    • 这个对我来说是最吸引我的,玩了之后,终于让这个方法起作用了。我必须更改 bootstrap 文件夹中的 paths.php 文件,特别是设置 'base' => DIR.'/../..' 并将我的工作台文件夹包含在新的域文件夹中,总而言之,这成功了。向提供解决方案的其他人表示敬意,但尚未尝试过,但感谢您的意见,给了我一些考虑。
    • @andreyco 我也有同样的情况,我有一个网站 www.ideconnect.com,基本上是 questionair,现在我想上传另一个类似的网站,其中包含 ideconnect 的子域名,请您帮忙我用这个。对于当前网站,我将 Public 文件夹的内容保存在我的网站 public 文件夹中,并放在 public 文件夹之外的另一个文件夹中。
    【解决方案2】:

    bootstrap/paths.php 保存主文件夹定义。对于每个实例,您可以从文件中更改应用文件夹、公用文件夹、基本文件夹、存储文件夹等。

    您可以设置 cookie/会话,或检查主域和子域的域等并进行如下更改:

    'app' => Session::has('subdomain')?'../../app':__DIR__.'/../app',
    

    【讨论】:

      【解决方案3】:

      为此使用路由器。

      例如

      Route::group(array('domain'=>'example.com'), function(){
      //Define the routes for example.com
      });
      
      Route::group(array('domain'=>'cms.example.com'), function(){
      //Define the routes for cms.example.com
      });
      

      为了便于维护,您可以为控制器使用命名空间。

      例如您的控制器文件夹可能如下所示

      App
      |
      |---Controllers
          |-- site
              |
              |-----HomeController.php
      
          |-- subdomain
              |
              |-----HomeController.php
      

      现在,对于站点控制器,使用像 <?php namespace site;?> 这样的命名空间

      对于子域控制器,使用 <?php namespace subdomain;?> 之类的命名空间

      在路由文件中,将路由定义为,

      Route::group(array('domain'=>'example.com'), function(){
          Route::get('/', array(
             'as' => 'index',
             'uses' => '\site\HomeController@index'
          ))
      });
      

      对于子域,

      Route::group(array('domain'=>'cms.example.com'), function(){
          Route::get('/', array(
             'as' => 'cms.index',
             'uses' => '\subdomain\HomeController@index'
          ))
      });
      

      简单明了的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-26
        • 2016-12-13
        • 1970-01-01
        • 2020-10-22
        • 2016-11-21
        • 1970-01-01
        • 2018-11-06
        • 2016-10-07
        相关资源
        最近更新 更多