nginx的rewrite模块官方英文文档的节选翻译

来源:互联网 发布:数据库中 概念模型是 编辑:程序博客网 时间:2024/06/11 17:06

最近在学nginx,对于rewrite不是很了解,去看了下官方的英文文档,顺便做了下翻译。本人不是英语专业,所以若翻译得不好,请拍砖。

若有建议,可发邮件到 vincentzhwg@gmail.com

 

 

Nginx Http Rewrite 模块

 

##摘要

此模块使得使用正则表达式来改变UR具备使用正则表达式来改变URI的功能,可根据变量来进行转向和选择配置。

如果相关的指令是在server级别中给出,则将在location之前先执行。如果在location模块有更进一步的重写规则,它们依然会被执行。如果URI的重写是由于location里的指令执行造成的,那么重写后的URI将会作为一个新的URI,location模块会再次进行一次匹配。

这种循环匹配的次数不能大于10次,否则nginx返回500错误。

 

##指令

 

break

语法:break

默认值:无

作用域:server, location , if

终止当前的规则匹配,不再执行任何的重写命令。

 

 

if

语法:if ( condition ) { ... }

默认值:无

作用域:server, location

检查condition的真假值。如果condition为真,则大括号里的命令将会被执行,并且请求会依照模块内的配置被处理。在if模块内的配置会继承前面的配置。理解起来就是如果上一作用域有一个root,那么接下来的if模块也会继承root这个配置。

 

以下可用于condition中:

* 变量名称;若变量值为空"",或字符串值以"0"开始,皆判定为false

* 可使用 = 和 != 操作符比较变量值

* 可使用 ~ 和 ~* 来匹配正则表达式

* ~ 区分大小写

* ~* 不区分大小写

* !~ 和 !~* 与 ~ 和 ~* 是相反的意思,即为若不匹配正则表达式,结果为真

* 检查一个文件是否存在,使用 -f 和 !-f

* 检查一个目录是否存在,使用 -d 和 !-d

* 检查一个文件/目录/链接是否存在,使用 -e 和 !-e

* 检查文件是否可执行文件,使用 -x 和 !-x

 

正则表达式中的部分可用一对圆括号括起来,依次按照 $1 至 $9 的变量名进行引用。

 

 

return

语法:return

默认值:无

作用域:server, location, if

该指令结束命令执行,并向客户端返回一个状态码。状态码可使用以下值:204, 400, 402-406, 408, 410, 411, 413, 416和500-504。另外,也可发送非标准的状态码444,从而在不发送任何头信息的情况下结束连接。

 

 

rewrite

语法:rewrite regex replacement flag

默认值:无

作用域:server, location, if

该指令依据正则表达(regex)和替换处的字符串值(replacement)来重写URI。指令的执行次序按照在配置文件中出现的顺序。

请注意,regex只匹配相对路径,而不是整个的URL。如果想要匹配主机名,请参考下面的if表达式:

if ($host ~* www/.(.*)) {

  set $host_without_www $1;

  rewrite ^(.*)$ http://host_without_www$1 permanent; # $1 contains '/foo', not 'www.mydomain.com/foo'

}

 

标志位(flag)具有结束命令执行的功能。

标志位(flag)可使用以下值:

* last 结束rewrite指令的执行,之后查找响应的URI和location

* break 结束rewrite指令的执行

* redirect 以状态码302进行临时重定向;可在替换的串值以 http:// 开头时使用它

* permanent 以状态码301进行永久重定向

如果重定向是相对的(即没有host主机名部分),当重定向时,nginx使用匹配的server_name作为主机名,如果未匹配到相应的头部或头部信息丢失则使用第一个 server_name 设置的值。如果没有设置 server_name, 那么就使用本地域名。如果你想要设置nginx成总是使用"Host"头部,那么请使用带有通配符 * 的 server_name 设置。

 

 

set

语法:set variable value

默认值:无

作用域:server, location, if

给变量(variable)赋值(value)。对于value的取值,可以使用文本、变量或它们的组合。

 

 

uninitialized_variable_warn

语法:uninitialized_variable_warn on/off

默认值:uninitialized_variable_warn on

作用域:http, server, location, if

打开或关闭对于未初始化变量的警告的日志记录。

 

原创粉丝点击