nginx的url重写rewrite模块

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangjianno2/article/details/75200819
nginx rewrite模块就是使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。rewrite模块包含的指令有break、if、return、rewrite、rewrite_log、set以及uninitialized_variable_warn。
rewrite模块的指令一般在server及location块指令里面。在server或location中包含了rewrite指令后,请求在server中处理顺序为:
a)执行server块中的rewrite模块指令
b)选择location
c)location块中的rewrite模块的指令被执行
d)如果在c)中请求uri被修改,那么会从b)继续往后执行,即重新选择location
备注:如上d)的循环不能超过10次,如果超过10次,就会返回浏览器500,内部服务器错误。

1.rewrite指令
rewrite指令只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用,例如http://seanlook.com/a/we/index.php?id=1&u=str,rewrite只对/a/we/index.php重写。
rewrite命令使用格式:
rewrite regex replacement [flag];
其中regex是正则,用来匹配request uri,replacement是将匹配的uri替换为新的uri。flag可以为last、break、redirect和permanent。
a)last
表示终止后续的rewrite模块的指令,且立即开始重新选择location,即实现nginx内部的重定向,对用户来说是无感的哦
b)break
表示终止后续的rewrite模块的指令,但是还会执行后续的非rewrite模块的指令,然后再开始重新选择location,也是实现nginx的内部重定向。
c)redirect
返回302临时重定向,浏览器地址栏会显示跳转后的地址。也即是外部重定向。
d)permanent
返回301永久重定向,地址栏会显示跳转后的地址。也是外部重定向。

2.return指令
表示终止nginx的请求处理,直接返回客户端响应。return指令的格式有:
return code [text];
return code URL;
return URL
举例来说,return 404将返回给浏览器404错误页面。return也可以实现30X的重定向了。如果return 444,那么nginx不会返回浏览器任何响应。

3.if指令
if指令用来根据一定的条件,来执行一些指令,格式如下:
if (condition) 
{ 
    ... 
}

备注:理解rewrite模块一定要理解内部重定向和外部重定向

猜你喜欢

转载自blog.csdn.net/wangjianno2/article/details/75200819