Yii2如何隐藏frontend/web和backend/web

王朝学院·作者佚名  2016-08-27  
宽屏版  字体: 小 | 中 | 大 | 超大  

Create .htaccessfile in root folder, i.e advanced/.htaccess and write below code.

Options +FollowSymlinks

RewriteEngine On

# deal with admin first

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

Note : if you are trying in local server then replace ^/ with ^/PRoject_name/ where you see arrow sign. Remove those arrow sign <------ after setup is done.

Now create a components/Request.php file in common directory and write below code in this file.

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;

}

/*

If you don't have this function, the admin site will 404 if you leave off

the trailing slash.

E.g.:

Wouldn't work:

site.com/admin

Would work:

site.com/admin/

Using this function, both will work.

*/

public function resolvePathInfo(){

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

return "";

}else{

return parent::resolvePathInfo();

}

}

}

Installing component. Write below code in frontend/config/main.php and backend/config/main.phpfiles respectively.

//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,

],

create .htaccess file in web directory

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /index.php?/$1 [L]

Note: make sure you have enabled your mod rewrite in apache

Thats it! You can try your project with

www.project.com/admin, www.project.com

in local server

localhost/project_name/admin, localhost/project_name

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

Advanced和 basic 最大的区别就是分离了前后台 分别是 backend目录和frontend目录 这两个目录实际相对于 basic 来说其实就是两个Yii应用 他们公用的比如Model部分都存放在Common目录 这种高级应用适用于比较复杂大型的项目用于彻底分离开前后台业务逻辑 因此访问前后台就相当于访问两个不同的应用

因此在配置Vhost webroot 目录的时候 假设域名为 www.xxx.com 那么 www.xxx.com指向前台目录 /frontend/web/

配置二级域名root.xxx.com 指向/backend/web/

对于刚接触Yii2的筒子建议先从basic入手

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有