rewrite 结合nginx提供的全局变量和自定义的变量,结合正则表达式以及标志位实现URL重写以及重定向
1、执行server块里的rewrite
2、 执行location里定义的rewrite
3、 选定location中的rewrite
rewrite中可以用if语句(只有if,没有else)
rewrite
[ flag ]:标志位,"标记"
本条规则匹配完成后,继续向下匹配新的location URI规则
rewrite ky30 k31 last;
location / {
root html
rewrite last
}
本条规则匹配完之后立即终止,页面内容变化,uri不变
临时重定向302 uri的地址会发生变化
永久重定向301 uri的地址会发生变化
搜索引擎的权重
永久重定向会加入搜索引擎的排名,但是临时不会加入搜索引擎的权重
internal redirection cycle while processing
处理请求时发生了重写或者内部重定向循环,进入了无限循环。nginx循环最多可以执行10次,会报错,500
总结:rewrite 和 location 都可以跳转,似乎有点像,但是区别在于:rewrite 是在同一域名之内进行更改获取资源的路径;location 是对路径访问控制
重点:
location 匹配的写法
location = /
精确匹配,完全匹配【优先级最高】
正则匹配
location ^~ 【第二优先级】
location ~* 【第二优先级】
location /test 【第三优先级】
location / 【第四优先级】
location 是访问控制,匹配到之后不再向下匹配
网站设置location规则
1、精确匹配,主要是为了匹配首页
2、location ^~ location ~* 指定内容匹配
3、location / 主要是为了做反向代理,把动态请求转发给后端服务器
rewrite:
permanent 永久重定向
redirect 临时重定向
break:
跳转,跳转之后不再继续匹配,而且不改变uri
last
继续向下匹配,nginx只能循环10次,超过10次就会报错,500
(internal redirection cycle while processing 处理请求时发生了重写或者内部重定向循环,进入了无限循环。nginx循环最多可以执行10次,超过10次,会报错,500)