Yii2高级模板URL美化

前言

  最近yoGa想做一个Yii2高级模板的URL美化,目标是:

  1. 通过ibye.cn/admin/杂七杂八 访问 ibye.cn/backend/web/index.php/杂七杂八;
  2. 通过ibye.cn/杂七杂八 访问 ibye.cn/frontend/web/index.php/杂七杂八。

做法

  yoGa使用的服务器端软件是apache,下面是apache虚拟机的配置文件:

1
2
3
4
5
6
//httpd-vhosts.conf:
<VirtualHost *:80>
ServerAdmin yoga@ibye.cn
DocumentRoot "/Users/yoga/Sites/yii2"
ServerName ibye.cn
</VirtualHost>

  还需要修改一下HOSTS文件:

1
127.0.0.1 ibye.cn

注:因为修改了apache配置文件,需要重启一下apache服务。

  接下来是.htaccess文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#这个放到/Users/yoga/Sites/yii2,即项目根目录
<IfModule mod_rewrite.c>
RewriteEngine on
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
</IfModule>
#下面这个分别放到 根目录/frontend/web/ 和 根目录/backend/web/
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1

  接着,需要新建一个Request.php文件,我把它放在了根目录/common/components下面,如果没有components这个文件夹可以新建一个。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
namespace common\components;
class Request extends \yii\web\Request {
public $web;
public $adminUrl;
/*
* 这里重写了\yii\web\Request的两个方法,目的是把URL某些不想给人看到的东西藏起来(*^__^*)
*/
public function getBaseUrl(){
return str_replace($this->web, "", parent::getBaseUrl()) . $this->adminUrl;
}
public function resolvePathInfo(){
if($this->getUrl() === $this->adminUrl){
return "";
}else{
return parent::resolvePathInfo();
}
}
}

  最后,修改main.php,分别是frontend/configbackend/config里面的main.php配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//找到key为'components'的地方,在里面的数组中 添加/修改
'request' => [
'csrfParam' => '_csrf-backend',
'class' => 'common\components\Request',
'web'=> '/backend/web',//若是frontend/config/main.php则改成/frontend/web
'adminUrl' => '/admin'//若是frontend/config/main.php则删掉
],
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<module>/<controller>/<action>',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>'
],
],

  OK接下来可以在浏览器的地址栏上写上帅气的URL了。

------ 本文结束 ------

版权声明

yoGa's Blog by yoga lee is licensed under a Creative Commons BY-NC-ND 4.0 International License.
yoga lee创作并维护的yoGa's Blog采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于yoGa's Bloghttp://yoga.ibye.cn ),版权所有,若需转载请注明出处,谢谢支持。