概念:
使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。
rewrite只能放在server{}、location{}、if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用,
例如: http://seanlook.com/a/we/index.php?id=1&u=str,只对/a/we/index.php重写。
语法:
rewrite regex replacement [flag]
regex:正则表达式匹配请求的URI
replacement:替换后的URI或URL,如果替换字符串以http、https或$scheme开头,则匹配终止,并返回客户端
flag:标志,参数如下:
last #停止处理后面rewrite指令,并用替换后的URI重新发起一次请求,再一次匹配location,
如果重新匹配循环的次数超过10次,nginx会返回500错误,返回302 http状态码,浏览器地址栏显示重地向后的url
break #停止处理后面rewrite指令,返回302状态码,浏览器地址栏显示重地向后的url
redirect #临时重定向,返回302状态码,浏览器地址栏显示重地向后的url
permanent #永久重定向,返回301状态码,浏览器地址栏显示重定向后的url
rewrite例1:配置http全部跳转至https
server {
listen 80;
server_name www.xxx.com;
rewrite ^(.*)$ https://$http_host$1 permanent;
}
rewrite例2:配置浏览器输入www.aaa.com,永久跳转到www.bbb.com,后面带着的内容不变:
server {
listen 80;
server_name www.aaa.com;
rewrite ^/(.*) http://www.bbb.com/$1 permanent;
}
rewrite与location的执行顺序:
1、执行server块的rewrite指令
2、执行location匹配
3、执行选定的location中的rewrite指令