Yii2隐藏frontend/web和backend/web的方法

作者: cheng 发布时间: 2017-03-13 浏览: 3208 次 编辑
  1. 在根文件夹中创建。htaccess文件,即先进/ .htaccess写下面的代码。

  2. <IfModule mod_rewrite.c>

    RewriteCond %{REQUEST_URI} ^/(admin)

    RewriteRule ^admin/assets/(.*)$ backend/web/assets/$1 [L]

    RewriteRule ^admin/css/(.*)$ backend/web/css/$1 [L]

    RewriteCond %{REQUEST_URI} !^/backend/web/(assets|css)/

    RewriteCond %{REQUEST_URI} ^/(admin)

    RewriteRule ^.*$ backend/web/index.php [L]

    RewriteCond %{REQUEST_URI} ^/(assets|css)

    RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L]

    RewriteRule ^css/(.*)$ frontend/web/css/$1 [L]

    RewriteCond %{REQUEST_URI} !^/(frontend|backend)/web/(assets|css)/

    RewriteCond %{REQUEST_URI} !index.php

    RewriteCond %{REQUEST_FILENAME} !-f [OR]

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^.*$ frontend/web/index.php

    </IfModule>

    Yii2隐藏frontend/web和backend/web的方法

  3.        

    注:如果你想在本地服务器进行替换^ / ^ / project_name /你在哪里看到的箭头标志。安装完成后删除这些箭头符号< ------。

    现在创建一个components/Request.php普通目录文件写在这个文件中的代码。


    namespace common\components;

    class Request extends \yii\web\Request {

          public $web;

          public $adminUrl;

          public function getBaseUrl(){

                return str_replace($this->web, "", parent::getBaseUrl()) . $this->adminUrl;

         } 

    /* 如果你没有这个功能,管理网站将404,如果你离开了尾随的削减。例如:不工作:site.com/admin会工作:site.com/admin/使用此功能,将工作。 */

         public function resolvePathInfo(){

                if($this->getUrl() === $this->adminUrl){

                       return "";   

               }else{

                       return parent::resolvePathInfo();  

              }

         }

    }

    Yii2隐藏frontend/web和backend/web的方法

  4. 安装组件。写在backend/config/main.php和backend/config/main.php中。


    //frontend, under components array

    'request'=>[ 

         'class' => 'common\components\Request',

         'web'=> '/frontend/web'

    ],

    'urlManager' => [

       'enablePrettyUrl' => true,

       'showScriptName' => false,

    ],


    // backend, under components array

    'request'=>[

        'class' => 'common\components\Request', 

        'web'=> '/backend/web',

        'adminUrl' => '/admin'

    ],

    'urlManager' => [

       'enablePrettyUrl' => true,

       'showScriptName' => false,

    ],

    Yii2隐藏frontend/web和backend/web的方法

    Yii2隐藏frontend/web和backend/web的方法

  5. 创建Web目录.htaccess文件。


    <IfModule mod_rewrite.c>RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ /index.php?/$1 [L]</IfModule>

    Yii2隐藏frontend/web和backend/web的方法

    Yii2隐藏frontend/web和backend/web的方法

  6. 注意:请重启你的Apache现在开始重新访问以下吧

    www.xxx.com/admin   访问后台

    www.xxx.com              访问前台


    以上是高级版的Advanced配置方法,基础版的不需要这样配置。

    Advanced和 basic 最大的区别就是分离了前后台 分别是 backend目录和frontend目录

    这两个目录实际相对于 basic 来说,其实就是两个Yii应用 ,他们公用的比如Model部分都存放在Common目录 这种高级应用适用于比较复杂大型的项目用于彻底分离开前后台业务逻辑 。

    因此访问前后台就相当于访问两个不同的应用,因此在配置Vhost webroot 目录的时候,假设域名为 www.elshequ.com 那么 www.elshequ.com指向前台目录 /frontend/web/配置二级域名root.xxx.com 指向/backend/web/


标签: yii2 后端