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 相关文章推荐
精通php的十大要点(上)
Feb 04 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
May 03 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
Jul 01 PHP
php获取目标函数执行时间示例
Mar 04 PHP
PHP实现的MongoDB数据库操作类分享
May 12 PHP
PHP基于CURL进行POST数据上传实例
Nov 10 PHP
php用户注册时常用的检验函数实例总结
Dec 22 PHP
PHP中模拟链表和链表的基本操作示例
Feb 27 PHP
php使用str_shuffle()函数生成随机字符串的方法分析
Feb 17 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
PHP基于递归算法解决兔子生兔子问题
May 11 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
Aug 21 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
PHP 模板高级篇总结
2006/12/21 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
php判断IP地址是否在多个IP段内
2020/08/18 PHP
Prototype使用指南之hash.js
2007/01/10 Javascript
javascript Ext JS 状态默认存储时间
2009/02/15 Javascript
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
2016/03/01 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
JavaScript之WebSocket技术详解
2016/11/18 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
2020/01/28 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
SheIn俄罗斯:时尚女装网上商店
2017/02/28 全球购物
为什么需要版本控制?
2013/08/08 面试题
美丽家庭事迹材料
2014/05/03 职场文书
信访工作经验交流材料
2014/05/23 职场文书
市场营销专业求职信
2014/06/17 职场文书
学校领导班子成员查摆问题及整改措施
2014/10/28 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
英文辞职信范文
2015/05/13 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
修改并编译golang源码的操作步骤
2021/07/25 Golang
Python中的变量与常量
2021/11/11 Python
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技