当前位置:首页 > CMS教程 > 其它CMS > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-29 21:48:53 浏览: 评论:0 

这篇文章主要介绍了Yii2隐藏frontend/web和backend/web的方法,需要的朋友可以参考下,Yii 是一个高性能,基于组件的 PHP 框架,用于快速开发现代 Web 应用程序。名字 Yii (读作 `易`)在中文里有 “极致简单与不断演变” 两重含义,也可看作 **Yes It Is**! 的缩写。

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

  1. Options +FollowSymlinks 
  2. RewriteEngine On 
  3. # deal with admin first 
  4. RewriteCond %{REQUEST_URI} ^/(admin) <------ 
  5. RewriteRule ^admin/assets/(.*)$ backend/web/assets/$1 [L] 
  6. RewriteRule ^admin/css/(.*)$ backend/web/css/$1 [L] 
  7. RewriteCond %{REQUEST_URI} !^/backend/web/(assets|css)/ <------ 
  8. RewriteCond %{REQUEST_URI} ^/(admin) <------ 
  9. RewriteRule ^.*$ backend/web/index.php [L] 
  10. RewriteCond %{REQUEST_URI} ^/(assets|css) <------ 
  11. RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L] 
  12. RewriteRule ^css/(.*)$ frontend/web/css/$1 [L] 
  13. RewriteCond %{REQUEST_URI} !^/(frontend|backend)/web/(assets|css)/ <------ 
  14. RewriteCond %{REQUEST_URI} !index.php 
  15. RewriteCond %{REQUEST_FILENAME} !-f [OR] 
  16. RewriteCond %{REQUEST_FILENAME} !-d 
  17. 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.

  1. namespace common\components; 
  2. class Request extends \yii\web\Request { 
  3.   public $web
  4.   public $adminUrl
  5.   public function getBaseUrl(){ 
  6.     return str_replace($this->web, "", parent::getBaseUrl()) . $this->adminUrl; 
  7.   } 
  8.   /* 
  9.     If you don't have this function, the admin site will 404 if you leave off  
  10.     the trailing slash. 
  11.     E.g.: 
  12.     Wouldn't work: 
  13.     site.com/admin 
  14.     Would work: 
  15.     site.com/admin/ 
  16.     Using this function, both will work. 
  17.   */ 
  18.   public function resolvePathInfo(){ 
  19.     if($this->getUrl() === $this->adminUrl){ 
  20.       return ""
  21.     }else
  22.       return parent::resolvePathInfo(); 
  23.     } 
  24.   } 

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

  1. //frontend, under components array 
  2. 'request'=>[ 
  3.   'class' => 'common\components\Request'
  4.   'web'=> '/frontend/web' 
  5. ], 
  6. 'urlManager' => [ 
  7.     'enablePrettyUrl' => true, 
  8.     'showScriptName' => false, 
  9. ], 
  10. // backend, under components array 
  11. 'request'=>[ 
  12.   'class' => 'common\components\Request'
  13.   'web'=> '/backend/web'
  14.   'adminUrl' => '/admin' 
  15. ], 
  16. 'urlManager' => [ 
  17.     'enablePrettyUrl' => true, 
  18.     'showScriptName' => false, 
  19. ], 
  20. create .htaccess file in web directory 
  21.  
  22. RewriteEngine On  
  23. RewriteCond %{REQUEST_FILENAME} !-f  
  24. RewriteCond %{REQUEST_FILENAME} !-d  
  25. RewriteRule ^(.*)$ /index.php?/$1 [L] 
  26.  
  27. Note: make sure you have enabled your mod rewrite in apache 
  28. Thats it! You can try your project with 
  29.  
  30. www.project.com/admin, www.project.com 
  31. in local server 
  32.  
  33. 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/

Tags: frontend backend

分享到: