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


Posted in PHP onDecember 12, 2015

Yii 是一个高性能,基于组件的 PHP 框架,用于快速开发现代 Web 应用程序。名字 Yii (读作 `易`)在中文里有 “极致简单与不断演变” 两重含义,也可看作 **Yes It Is**! 的缩写。

Create .htaccess file 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隐藏frontend/web和backend/web的方法,希望大家喜欢。

PHP 相关文章推荐
杏林同学录(四)
Oct 09 PHP
FCKeditor的安装(PHP)
Jan 13 PHP
php下过滤HTML代码的函数
Dec 10 PHP
php设计模式 Builder(建造者模式)
Jun 26 PHP
VIM中设置php自动缩进为4个空格的方法详解
Jun 14 PHP
thinkphp3.2.2实现生成多张缩略图的方法
Dec 19 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
Feb 04 PHP
完美解决Thinkphp3.2中插入相同数据的问题
Aug 01 PHP
关于php unset对json_encode的影响详解
Nov 14 PHP
PHP Include文件实例讲解
Feb 15 PHP
laravel 获取当前url的别名方法
Oct 11 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
Dec 11 #PHP
WordPress中制作导航菜单的PHP核心方法讲解
Dec 11 #PHP
搭建Vim为自定义的PHP开发工具的一些技巧
Dec 11 #PHP
PHP开发中AJAX技术的简单应用
Dec 11 #PHP
基于PHP如何把汉字转化为拼音
Dec 11 #PHP
PHP异常处理Exception类
Dec 11 #PHP
编写PHP脚本来实现WordPress中评论分页的功能
Dec 10 #PHP
You might like
在PHP3中实现SESSION的功能(三)
2006/10/09 PHP
php下关于中英数字混排的字符串分割问题
2010/04/06 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
php实现登陆模块功能示例
2016/10/20 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
js中获取事件对象的方法小结
2011/03/13 Javascript
javascript 实现 秒杀,团购 倒计时展示的记录 分享
2013/07/12 Javascript
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
Web制作验证码功能实例代码
2017/06/19 Javascript
Vue中JS动画与Velocity.js的结合使用
2019/02/13 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
python 排列组合之itertools
2013/03/20 Python
python实现用户登陆邮件通知的方法
2015/07/09 Python
python实现简单登陆流程的方法
2018/04/22 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
Django nginx配置实现过程详解
2020/09/10 Python
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
Ajxa常见问题都有哪些
2014/03/26 面试题
服装厂厂长职责
2013/12/16 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
应聘教师自荐书
2014/06/16 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
2016年教师节慰问信
2015/12/01 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书
总结Python变量的相关知识
2021/06/28 Python