nginx 的rewrite和Apache的rewrite规则是有区别的,这儿介绍一下nginx的rewrite规则:
1.if条件规则
1. = 等于 != 不等于
2.使用~ 和~*进行正则表达式的匹配,注意:~匹配大小写,~*不匹配大小写
3.-f和!-f判断文件是否存在
4.-d和!-d判断目录是否存在
5.-e和!-e判断文件或目录是否存在
ex:
if ( !-e $request_filename ) {
rewrite (.*) /index.php
}
2.return 规则
结束规则的执行,返回状态码给客户端,状态码可能是:204,400等等。
ex:
if ( $request_uri ~ " " ) {
return 444; //不返回任何header头文件
}
3.set
该指令用于定义变量,并赋值
set $name 'hello';
4.rewrite规则
rewrite search_pattern replace_pattern flag
参数flag有last,break,redirect(302临时重定向),permanent(301永久重定向)
last:在本条规则匹配完成后,会对其所在的server{}标签重新发起请求
break:匹配完成后,就终止匹配。
在location的跟中可以使用last,而在location的子目录中,不能使用last,可以使用break,否则会陷入死循环中。
ex:
location /a/ {
rewrite ^/a/(.*)$ /a/index.php break;
}
Note:
rewrite 中的规则中有{},要加上“”,避免和nginx的{}冲突
rewrite "^/([0-9]{2})/(.*)$" /$1/$2.png;