yii2 关于 apache 和 nginx 的路由重写配置

apache路由重写

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Options +FollowSymLinks
IndexIgnore */*
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

从yiichina那里推荐的apache路由重写方案直接改服务器的配置文件影响太大了,我们需要把它限制在这个项目里,这样更方便操作了

需要开启 apache 的 rewrite 模块

参考了一下laravel的路由重写方案,首先在你的根目录下 your-app/web创建一个文件

.htaccess 文件内容如下

1
2
3
4
5
6
7
8
9
<IfModule mod_rewrite.c>
     # 开启 mod_rewrite 用于美化 URL 功能的支持(译注:对应 pretty URL 选项)
        RewriteEngine on
        # 如果请求的是真实存在的文件或目录,直接访问
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        # 如果请求的不是真实文件或目录,分发请求至 index.php
        RewriteRule . index.php
</IfModule>

nginx路由重写

1
2
3
4
5
location / {  
    if (!-e $request_filename){  
        rewrite ^/(.*) /index.php last;  
    }  
}

conf/web.php 中的 ‘components’数组是这样的

1
2
3
4
5
6
'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
            ],
        ],