Yii2高级模板url去掉frontend/web和backend/web

97 阅读1分钟

使用yii2高级模板时,访问前端的默认url是localhost/yii-advanced/frontend/web,访问后端的默认url是localhost/yii-advanced/backend/web。通过下面两个步骤,可以把前端的url修改成localhost/yii-advanced/,后端的url修改成localhost/yii-advanced/admin。

一、项目根目录下面添加.htaccess文件

Options -Indexes
Options +FollowSymlinks
RewriteEngine On

# deal with admin first
RewriteCond %{REQUEST_URI} ^/yii-advanced/(admin)
RewriteRule ^admin/assets/(.*)$ backend/web/assets/$1 [L]
RewriteRule ^admin/css/(.*)$ backend/web/css/$1 [L]
RewriteRule ^admin/js/(.*)$ backend/web/js/$1 [L]
#RewriteRule ^admin/(.*ico)$ backend/web/$1 [L]

RewriteCond %{REQUEST_URI} !^/yii-advanced/backend/web/(assets|css)/
RewriteCond %{REQUEST_URI} ^/yii-advanced/(admin)
RewriteRule ^.*$ backend/web/index.php [L]


RewriteCond %{REQUEST_URI} ^/yii-advanced/(assets|css)
RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L]
RewriteRule ^css/(.*)$ frontend/web/css/$1 [L]
RewriteRule ^js/(.*)$ frontend/web/js/$1 [L] 
RewriteRule ^images/(.*)$ frontend/web/images/$1 [L]
RewriteRule ^/(.*ico)$ frontend/web/$1 [L]

RewriteCond %{REQUEST_URI} !^/yii-advanced/(frontend|backend)/web/(assets|css)/
RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ frontend/web/index.php

二、common目录下新建components\Request.php

<?php
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;
     } 

/* 如果没有这个功能,管理网站将404。例如:不工作:site.com/admin;会工作:site.com/admin/。使用此功能,两个都可以访问。 */

     public function resolvePathInfo(){
            if($this->getUrl() === $this->adminUrl){
                   return "";   
           }else{
                   return parent::resolvePathInfo();  
          }
     }
}