ngx_http_rewrite_module
该模块允许使用正则表达式改变URI,并且根据变量来转向以及选择配置。
如果在server级别设置该选项,那么他们将在location之前生效。如果在location还有更进一步的重写规则,location部分的规则依然会被执行。如果这个URI重写是因为location部分的规则造成的,那么location部分会再次被执行作为新的URI。
这个循环会执行10次,然后Nginx会返回一个500错误。
指令
[#break break]
[#if if]
[#return return]
[#rewrite rewrite]
[#set set]
[#uninitialized_variable_warn uninitialized_variable_warn]
break
语法: break
默认值: none
作用域: server, location, if
Completes the current set of rules. 作用是完成当前的规则列
示例:
if ($slow) {: limit_rate 10k;: break;}
if
语法: if (condition) { ... }
默认: none
作用域: server, location
Checks the truth of a condition. If the condition evaluates to true, then the code indicated in the curly braces is carried out and the request is processed in accordance with the configuration within the following block. Configuration inside directive if is inherited from the previous level.
条件语句可以使下列的几种:
一个变量的名称;如果变量的值为空字符串""或者任何以0开始的字符串,则表示条件语句的值为假 the comparison of variable with the line with using the = and != operators; pattern matching with regular expressions using the symbols ~* and ~: 正则表达式形式的模式匹配,如~*和~ ‘~’表示
大小写敏感的匹配 ‘~*’表示大小写不敏感的匹配(
例如:“firefox”字符串可以成功匹配“FireFox”) !~和!~*代表跟后面的正则匹配规则相反的规则,表示不能匹配当前正则表达式规则的字符串执行后面的处理语句 使用-f参数以及!-f参数检测一个文件是否存在 使用-d参数以及!-d参数检测一个目录(路径)是否存在 使用-e以及!-e检测是否存在一个文件,一个目录或者一个符号链接。 使用-x以及!-x检测一个文件是否可执行
正则表达式部分可以嵌套,表达式后面的部分如果用到前面的表达式可以用 $1 到$9 变量表示。
例子如下:
if ($http_user_agent ~ MSIE) {: rewrite ^(.*)$ /msie/$1 break;}if ($http_cookie ~* "id=([^;] +)(?:;|$)" ) {: set $id $1;}if ($request_method = POST ) {: return 405;}if (!-f $request_filename) {: break;: proxy_pass http://127.0.0.1;}if ($slow) {: limit_rate 10k;}if ($invalid_referer) {: return 403;}
The value of the built-in variable $invalid_referer is given by the directive valid_referers.