关于 URL 美化的 nginx 配置问题 [ 未指定版本 ]
之前一直这样写 nginx 的配置
if (!-e $request_filename){
rewrite ^/(.*) /index.php?r=$1 last;
}
或者这样写:
location / {
try_files $uri $uri/ /index.php?r=$uri&$args;
}
以上两种方法差不多,都 很容易理解。
最近 偶然看到权威指南里关于nginx的配置是 这样写的
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
不禁 产生了 疑惑,这里 只是把参数传给了 index.php 文件,把 uri信息 怎么给 丢掉了?
通过查看 yii2 的源代码发现,yii 在不开启 URL美化的时候是通过 r 参数来获取路由信息的,在开启 URL美化 的时候,yii 并不是通过 参数来获取 路由信息的,而是通过 REQUEST_URI 这个环境变量来获取,而 REQUEST_URI 这个环境变量里 保存的是 原始的 URL信息,并不受 rewrite 或者 try_files 的影响
举例说:
请求的 url 为 /site/view?id=3
try_files 后,也就是 yii 实际得到的 url 为 index.php?id=3
环境变量 REQUEST_URI 内容为 /site/view?id=3
所以,之前 nginx配置的写法 把 r 传给index.php 完全是 多此一举,它根本也不会用。
其实 REQUEST_URI 里也包括的 参数信息,但 yii 是通过 QUERY_STRING 这个环境变量来获取参数的,所以 还是要把 参数 传给 index.php ,假如 yii 通过解析 REQUEST_URI 来获取参数信息的话,那么 try_files 的时候 就可以 连参数都不要了,直接 try_files $uri $uri/ /index.php
这样就行了。
蓝
注册时间:2013-09-13
最后登录:2024-03-31
在线时长:99小时41分
最后登录:2024-03-31
在线时长:99小时41分
- 粉丝13
- 金钱3225
- 威望500
- 积分9215