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 信息采集程序代码
Mar 17 PHP
php错误级别的设置方法
Jun 17 PHP
PHP根据IP地址获取所在城市具体实现
Nov 27 PHP
PHP不用递归实现无限分级的例子分享
Apr 18 PHP
php除数取整示例
Apr 24 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
PHP注释语法规范与命名规范详解篇
Jan 21 PHP
PHP设计模式之策略模式原理与用法实例分析
Apr 04 PHP
yii2 开发api接口时优雅的处理全局异常的方法
May 14 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
May 27 PHP
php7下的filesize函数
Sep 30 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 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
Session的工作方式
2006/10/09 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
laravel 框架执行流程与原理简单分析
2020/02/01 PHP
Javascript开发包大全整理
2006/12/22 Javascript
javascript web对话框与弹出窗口
2009/02/22 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
angularjs ui-router中路由的二级嵌套
2017/03/10 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
layui实现动态和静态分页
2018/04/28 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
vue 更改连接后台的api示例
2019/11/11 Javascript
vue实现分页加载效果
2019/12/24 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
Python两个内置函数 locals 和globals(学习笔记)
2016/08/28 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
python实现简单的购物程序代码实例
2020/03/03 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
美国排名第一的葡萄酒俱乐部:Firstleaf Wine Club
2020/01/02 全球购物
控制工程专业个人求职信
2013/09/25 职场文书
大型车展策划方案
2014/02/01 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
拉拉队口号
2014/06/16 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
环境建议书
2015/02/04 职场文书
孟佩杰观后感
2015/06/17 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
Java面试题冲刺第十五天--设计模式
2021/08/07 面试题