关于nginx中的rewrite问题

今天看了点nginx的rewrite资料,但是不太明白,也没有比较详细的资料,希望大家能帮忙给点指点,谢谢if(!-e$request_filename){rewrite... 今天看了点nginx的rewrite资料,但是不太明白,也没有比较详细的资料,希望大家能帮忙给点指点,谢谢
if (!-e $request _filename){
rewrite ^/(\w+)/(.*)$ /$1/index.php last;
}
这段谁能给我解释下呢,中间的 \w+ 是表示什么,$1代表什么,最好能给个例子,原来是什么地址,然后重定向之后又是什么效果
展开
 我来答
卖土豪的
推荐于2017-11-26 · 超过14用户采纳过TA的回答
知道答主
回答量:43
采纳率:0%
帮助的人:37.6万
展开全部
\w+ 匹配由数字、26个英文字母或者下划线组成的字符串
.* 意味着能够匹配任意数量的任何字符
$1-$9存放着正则表达式中最近的9个正则表达式的匹配结果,这些结果按照子匹配的出现顺序依次排列。
$1 代表的是匹配的第一个结果
括号表示的是表达式定义的“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个) 上面的表达式有2个匹配组 (\w+) 和 (.*) 所有后面可以用 $1 和 $2 来用

比如你的例子
^/(\w+)/(.*)$ /$1/index.php last;

/abc123/bcdfda => /abc123/index.php
笑喘是病得抽
2018-07-27 · TA获得超过925个赞
知道大有可为答主
回答量:2140
采纳率:98%
帮助的人:2230万
展开全部
字面意思就是把abc.com/xxx按abc.com/index.php/xxx来解析
对于/index.php/abc这种url,Apache和lighttpd会按"index.php?abc"来解释,而nginx会认为是请求名字是“index.php”的目录下的abc文件的内容。所以一些框架,如CI,在nginx下不配置rewrite是无法运行的,而在Apache和lighttpd则正常。另外,好像nginx里index.php会转换成index_php,(未求证)
解决方法是
location /
{
index index.php;
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?$1 last;
break;
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式