【问题标题】:Configure Cakephp on Linux production server在 Linux 生产服务器上配置 Cakephp
【发布时间】:2014-05-26 23:31:26
【问题描述】:

我在 Linux 服务器上托管一个网站,文件夹是这样的

/var/www/html/agitoriosul.com.br/web/

/web 是公用文件夹

我想把 coreapp 文件夹放在 web 文件夹和 webroot 之前的一级 web 文件夹。

我知道我需要在 webroot 中配置 index.php,但我尝试了很多东西,但没有任何效果。

现在所有文件夹都在 web(public folder) 内,但是,首先我知道 coreapp 文件夹不能留在 web(公共文件夹),其次,使用Html->链接助手创建的所有链接都指向物理路径(/var/www/html/agitoriosul.com.br/web/)而不是虚拟的(agitoriosul.com .br/) 路径。

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    /web 是公用文件夹

    因此使用标准文件夹布局将有以下内容:

    /var/www/html/example.com
        app
            webroot
        lib
        plugins
        vendors
    

    但是想要这个:

    /var/www/html/example.com
        app
        lib
        plugins
        vendors
        web
    

    移动和编辑

    实现这一目标的步骤非常简单:

    移动文件夹

    使用如下命令:

    $ cd /var/www/html/example.com
    $ mv app/webroot web
    

    更正ROOT pathAPP_DIR 常量

    即web/index.php 文件将包含:

    //define('ROOT', dirname(dirname(dirname(__FILE__))));
    define('ROOT', dirname(dirname(__FILE__)));
    
    //define('APP_DIR', basename(dirname(dirname(__FILE__))));
    define('APP_DIR', 'app');
    // cannot be derived, as the app folder is not a parent
    

    或者,如果愿意的话:

    //define('ROOT', dirname(dirname(dirname(__FILE__))));
    define('ROOT','/var/www/html/example.com');
    
    //define('APP_DIR', basename(dirname(dirname(__FILE__))));
    define('APP_DIR', 'app');
    

    或者

    不要移动任何东西,只需像这样对 webroot 进行符号链接:

    /var/www/html/example.com
        app
            webroot
        lib
        plugins
        vendors
        web -> app/webroot
    

    使用如下命令:

    $ cd /var/www/html/example.com
    $ ln -s app/webroot web
    

    这不需要修改应用程序的 webroot 文件。

    【讨论】:

    • Webroot 留在 web(公共文件夹)内还是只是 webroot 的内容?即:此处为 web/webroot/**files 或此处为 web/**files ?
    • 我移动了文件夹以保持与您所说的完全一致,并且该站点正在运行(良好),但是使用 Html 生成的 URL 仍然指向物理路径而不是虚拟路径,如果您访问 this link,您可以听我说的。
    • 我不记得具体原因归结为how the base url is determined - 它表示环境问题,不太可能与问题直接相关。您也许可以忽略它并 force the base url - 否则您需要确定为什么您的应用程序显然认为它的根 url 是文件路径。
    • 我自己的想法I verified the above 使用最新的稳定版本。我确实想到过去曾报告过 old 版本的 CakePHP 的问题(问题没有提及您使用的是什么版本)如果 webroot 是不在应用程序目录中。
    【解决方案2】:

    我使用相同的 lib 和 plugins 和 vendor 文件夹创建了两个应用程序

    请看下面提到的文件夹结构:

    主文件夹

    /var/www/cake
    /var/www/cake/lib
    /var/www/cake/plugins
    /var/www/cake/vendors
    

    应用程序 1

    /var/www/cake/cake1/app
    /var/www/cake/cake1/webroot
    

    编辑:

    /var/www/cake/cake1/webroot/index.php (only three edits)
    
    if (!defined('ROOT')) {
        //define('ROOT', dirname(dirname(dirname(__FILE__))));
        define('ROOT', dirname(dirname(__FILE__)));
    }
    
    if (!defined('APP_DIR')) {
        //define('APP_DIR', basename(dirname(dirname(__FILE__))));
        define('APP_DIR', 'app');
    }
    
    define('CAKE_CORE_INCLUDE_PATH', dirname(dirname(dirname(__FILE__))) . DS . 'lib');
    

    应用 2

    /var/www/cake/cake2/app
    /var/www/cake/cake2/webroot
    

    编辑:

    /var/www/cake/cake2/webroot/index.php (only three edits)
    
    if (!defined('ROOT')) {
        //define('ROOT', dirname(dirname(dirname(__FILE__))));
        define('ROOT', dirname(dirname(__FILE__)));
    }
    
    if (!defined('APP_DIR')) {
        //define('APP_DIR', basename(dirname(dirname(__FILE__))));
        define('APP_DIR', 'app');
    }
    
    define('CAKE_CORE_INCLUDE_PATH', dirname(dirname(dirname(__FILE__))) . DS . 'lib');
    

    这适用于 ubuntu 上的两个虚拟主机

    http://cake1/
    http://cake2/
    

    【讨论】:

    • 也许我遗漏了一些东西 - 它要求处理多个应用程序的问题在哪里?看起来你已经回答了一个完全不同的问题 -1。
    猜你喜欢
    • 2013-09-22
    • 2015-10-06
    • 2014-10-16
    • 2012-04-04
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多