繁体   English   中英

如何使用/ web以外的Web根部署yii2

[英]How to deploy yii2 with a web root other than /web

我正在研究yii2项目,并希望将其部署到apache服务器,在该服务器中,整个网站应位于/ public_html目录中,而/ public_html是该主机的Web根目录。 问题在于yii2期望Web根目录为/ web,并且期望大多数站点层次结构都位于/ web目录之外。

我希望不必将webroot更改为/ public_html / web,对于将来的项目,这可能不是一个选择。 因此,有没有办法将整个网站层次结构放置在/ public_html中,并且仍然使网站正常工作?

我尝试创建具有以下内容的/public_html/.htaccess文件:

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !web/
    RewriteRule (.*) /web/$1 [L]

首先,这似乎正常工作。 / public_html / web之外的任何内容都无法访问,并且/ web子目录中的文件(例如/web/js/signup.js)可以通过url http://localhost/js/signup.js进行访问,但这引起了我的路由规则(是在本地系统上设置的,我可以将Web根目录指向/ web)不再被识别。

因此,对于.htaccess路由的替代方案,或者对如何修复路由规则以使.htaccess路由起作用的建议,我将感到满意。

编辑澄清

我有一个托管提供商,其网络根为〜/ public_html。 Yii的文档说明了您可以将www重命名为public_html,并将通常位于/ www之外的所有内容放在〜中,以及Linux通常放置在〜中的各种点文件和用户文档。 我希望将所有与站点相关的目录放在一起(在webroot下)。

或者,可以使用两目录结构,例如以下结构:

~/
 |--- (Various dotfiles and subdirectories unrelated to the web site)
 |--- yii - Contains all subfolders that should be outside of the web root
      |--- commands
      |--- config
      |--- controllers 
      |--- (etc...)
 |--- public_html - Contains everything that can be within the web root.
      |--- (etc...)

这个问题被问了很多遍,以至于他们在Yii2文档中为此做了一个页面

我个人回答了很多次,以至于无法记住。

这可以通过使用别名来完成。

将您的Web目录移动到新的webroot(假设〜/ mysite.com是您的现有站点):

rm -rf ~/public_html
mv ~/mysite.com/web ~/public_html

然后,将您的Webroot之外的所有内容移动到新目录:

mv -prf ~/mysite.com ~/mysite.example-external

此时,您应该在〜/ public_html处具有Web根目录,并且在〜/ mysite.example-external中应具有其他所有内容。 然后,您编辑〜/ public_html / index.php文件。 请注意,这不是yii核心的一部分,因此可以对其进行修改。 新索引应对此有所不同:

<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

$thepath = __DIR__ . '/../mysite.example-external';

require( $thepath . '/vendor/autoload.php');
require( $thepath . '/vendor/yiisoft/yii2/Yii.php');

$config = require( $thepath . '/config/web.php');

(new yii\web\Application($config))->run();

从这里,您还必须在〜/ mysite.example-external / config / web.php文件中添加别名,以便yii可以找到其核心文件。 在web.php中,为$ config分配一个值,将其修改为类似于以下内容:

$config = [
    'aliases'   => [
        'webroot/assets' => '/Users/XXXXXX/mysite.example-external/web/assets',
        'root' => '/Users/XXXXXX/mysite.example-external/web',
    ],

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM