Yii 2.x 简化URL

Yii 2.x 简化URL

之前写过一篇文章介绍如何简化Yii 1.1 的URL,

Yii 1.1 简化URL

今天使用Yii 2.x发现这部分有变动,所以跟大家共享跟新内容。

 

在默认的情况下,Yii开发的web应用的URL特别怪异,如默认的首页

 

http://[domainname/ip]/index.php?r=site/index

 

我们想能简化一下,看起来舒服一点。 比如简化如下格式:

 

http://[domainname/ip]/site/index

 

就是去掉r=…., 变成目录方式形式,

 

http://[domainname/ip]/index.php/site/index

 

要做到这一步,打开 /config/main.php,找到 urlManager,默认设置是:

 

/*        'urlManager'=>array(

          'enablePrettyUrl' => true,

          'showScriptName' => false,

            'rules'=>array(

            ),

        ), */

 

也就是说这个设置被屏蔽掉的,我们放开它,此时就达到我们要目录样式的效果了。这里注意一下,新版本中废弃了urlformat属性,新加了enablePrettyUrl。

 

接下来我们想隐藏掉index.php这个文件。这个就需要apache服务器的rewrite模块的功能了,使用它之前需要让apache加载它,就是去apache的config文件中,把注释掉的这一句放开就可以了。

 

LoadModule rewrite_module modules/mod_rewrite.so

 

接下来我们在工程目录,也就是index.php所在的目录的(basic模板中这个目录是web),创建一个

.htaccess

文件,注意前面有一个点。在里面输入如下内容:

 

RewriteEngine on

# if a directory or a file exists, use it directly

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php

RewriteRule . index.php

 

接着在/config/main.php中,往urlManager中添加属性showScriptName,其值为false,因此urlManager变成这样

 41         'urlManager' => [
 42             'enablePrettyUrl' => true,
 43             'showScriptName' => false,
 44             'suffix' => '.html',
 45             'enableStrictParsing' => false,
 46             'rules' => [
 47             ],
 48         ],

下面是1.1版本的配置,可以做个比较。

        'urlManager'=>array(

            'urlFormat'=>'path',

            'showScriptName'=>false,

            'rules'=>array(

                '<controller:w+>/<id:d+>'=>'<controller>/view',

                '<controller:w+>/<action:w+>/<id:d+>'=>'<controller>/<action>',

                '<controller:w+>/<action:w+>'=>'<controller>/<action>',

            ),

        ),

 

另外一个就是更改apache的配置文件,

将其中的

<Directory "xxxxxx">

AllowOverride None

</Directory>

 

改为

AllowOverride FileInfo

改这个是让apache能够使用.htaccess这个文件,保存退出,最后一步是重启apache或者httpd服务器

$> sudo systemctl restart httpd            —– 这是centos7的命令,

$> sudo service httpd restart                —— 这是centos7之前的命令

 

现在测试,是不是已经可以使用我们要的效果了。

 

i

 

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章转载自:IT夜班车,否则按侵权处理i.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *