网站服务器
HTTP响应状态码
HTTP服务器
HTTP开启SSL及鉴权
HTTP虚拟主机服务
NGINX服务器
NGINX开启SSL及鉴权
NGINX虚拟主机服务
NGINX代理与缓存功能
NGINX 重写规则
重新编译NGINX
NGINX安全加固
正向代理(HTTP)
Nginx服务器配置
SQUID缓存服务器
SQUID正向代理
SQUID透明代理
SQUID问题
本文档使用MrDoc发布
返回首页
-
+
NGINX 重写规则
2020年5月13日 17:58
admin
#IF判断指令 >##if (condition) {…} 对给定的条件condition进行判断。如果为真,大括号内的rewrite指令将被执行 #注意:使用正则表达式字符串一般不需要加引号,但是如果含有右花括号“}”或者分号“;”字符时,必须要给整个正则表达式加引号 >####指令: ~ #区分大小写匹配 ~* #不区分大小写匹配 = #精确匹配 -f和!-f #用来判断请求文件是否存在 -d和!-d #用来判断请求目录是否存在 -e和!-e #用来判断是请求的文件或者目录否存在 -x和!-x #用来判断请求的文件是否可执行 >####例子 if (-f $request_filename){ … #判断请求的文件是否存在,存在就执行这里面的代码块 } --- >##break指令 用于中断当前相同作用域中的Nginx配置,和Java中的break语法类似,可以在server块和location以及if块中使用。 break; --- >##IF可用的全局变量 >####$host_host变量,和$host区别如下: $host不带端口,$http_host带端口 >![](/media//202005/2020-05-13183501787981.png) --- >##SET指令 >####用来设置新的变量, set variable value; #variable,这个是变量的名称,这个符号的“$”必须作为变量第一个字符,并且不能和Nginx服务器预设的全局变量同名value,为变量的值。比如 set $id “3”; #设置id为3 #执行体 >##RETURN指令 >####该指令用于完成对请求的处理,直接向客户端响应状态的代码。和Java中的return语法类似。可以再server块和location以及if块中使用。 return code URL; #code表示状态码,URL表示返回给客户单的URL地址 return URL: #当状态码是302或者307的时候,可以使用,返回的URL必须包含“http://”、“https://”或者直接使用“$scheme”变量(RequestScheme代表传输协议,Nginx内置变量) #或者 return [text]; #为返回给客户端的响应体内容,支持变量的使用 >####例子: if (!-f $request_filename) { return 400; } --- >##REWRITE指令 >####该指令通过正则表达式的使用来改变URI.可以同时存在一个或者多个指令,按照顺序一次对URL进行匹配和处理。该指令可以在server块后者location块中配置 rewrite regex replacement [flag]; ------------------------------------------------------- #rewrite是实现URL重定向的重要指令, regex:用来匹配URI的正则表达式; replacement:匹配成功后用来替换URI中被截取内容的字符串,默认情况如果该字符串包含“http://”、"https://"开头,则不会继续向下对URI进行其他处理。直接返回重写的URI给客户端 flag:用来设置rewrite对URI的处理行为,包含如下数据: |标记符号| 说明 |--|--| |last| 终止在本location块中处理接收到的URI,并将此处重写的URI作为新的URI使用其他location进行处理。(只是终止当前location的处理) |break|将此处重写的URI作为一个新的URI在当前location中继续执行,并不会将新的URI转向其他location。 |redirect| 将重写后的URI返回个客户端,状态码是302,表明临时重定向,主要用在replacement字符串不以“http://”,“ https://”或“ $scheme” 开头; |permanent| 将重写的URI返回客户端,状态码为301,指明是永久重定向; >####例子 if ($http_user_agent ~* '(iPhone|iPod)' { rewrite ^.+ http://mobile.siate.com$uri; } #如果用户使用的时iPhone或iPod访问服务器,则将请求重定向至http://mobile.siate.com$uri ------------------------------------------------------- if ($args ~ post=140){ rewrite ^ http://example.com/ permanent; } #如果query string中包含"post=140",永久重定向到example.com
分享到: