
2.位置:rewrite只能放在server{},location{},if{}中。
3.作用域:只能对域名后边的除去传递的参数外的字符串起作用,例如 http://baidu.com/a/we/index.php?id=1&u=str ,只对/a/we/index.php重写
4.如果相对域名或参数字符串起作用,可以使用全局变量匹配,也可以使用proxy_pass反向代理。
5.执行顺序是:
<1> 执行server块的rewrite指令
<2.>执行location匹配
<3. >执行选定的location中的rewrite指令
如果其中某步URI被重写,则重新循环执行1-3,直到找到真实存在的文件;循环超过10次,则返回500 Internal Server Error错误。
6.语法rewrite regex replacement [flag]
7.flag标志位
last : 相当于Apache的[L]标记,表示完成rewrite
break : 停止执行当前虚拟主机的后续rewrite指令集
redirect : 返回302临时重定向,地址栏会显示跳转后的地址
permanent : 返回301永久重定向,地址栏会显示跳转后的地址
因为301和302不能简单的只返回状态码,还必须有重定向的URL,这就是return指令无法返回301,302的原因了。这里 last 和 break 区别有点难以理解
8.last一般写在server和if中,而break一般使用在location中,
last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配,
break和last都能组织继续执行后面的rewrite指令
9 常用正则
. : 匹配除换行符以外的任意字符
? : 重复0次或1次
10 例子:
Nginx 里的 rewrite 模块是专门负责静态重写的。
该模块允许使用正则表达式改变 URI,并且根据变量来重定向以及选择配置。
基本用法是: rewrite patten replace flag 。 patten 是正则表达式,与 patten 匹配的 URL 会被改写为 replace ,而 flag 是可选的,可以有如下标志:
例如,要将旧域名重定向到新域名上:
如果是跳转到新域名上时要保留路径,那么:
还有一种方式,如果域名不是 www.new.domain.com 就统一转到 https://www.new.domain.com :
$host 是 core 模块内部的一个变量,当请求头里不存在 host 属性或者是个空值, $host 则等于 server_name 。如果请求头里有 host 属性,那么 $host 等于 host 属性除了端口号的部分,例如 host 属性是 www.example.com ,那么 $host 就是 www.example.com 。
也可以单独增加一个 server,在里面统一设置, permanent 是 301 重定向:
rewrite 与 location 配合实现图片文件跳转到 CDN:
访问后台出现重定向次数过多该怎么办?-建站需知
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)