目录
Rewrite相关指令
set指令
if指令
①布尔值
编辑
②相等
编辑
③正则匹配
④判断文件
⑤其他
break指令
编辑
return指令
rewrite指令
rewrite_log指令
Rewrite应用场景
域名跳转
编辑
独立域名
Rewrite相关指令
rewrite
指令是用于基于正则表达式修改请求的URI(统一资源标识符)的强大工具。它允许你根据请求的URI、请求参数或其他条件来重定向用户到不同的页面或路径。rewrite
指令通常用于URL重写、伪静态化、实现友好的URL结构等场景。
set指令
设置变量
语法 | set $variable value; |
---|---|
默认值 | -- |
位置 | server块,location块,if块 |
location /111 {set $name monkey;default_type text/plain;return 200 $name;}
if指令
支持条件判断,根据不同结果选择不同的nginx配置
语法 | if (condition) {...} |
---|---|
默认值 | -- |
位置 | server块,location块 |
①布尔值
对应的值为空字符或者0,if判断为false,其他条件为true
例如:
location /if {set $monkey 10 ;if ($monkey) {return 200 "monkey is not null";}
②相等
使用=和!=来进行条件判断
例如:
location /ifi {if ($request_method = POST) {return 200 "this is POST" ;}return 200 "this is ifi";}
③正则匹配
使用正则表达式进行匹配
例如:
if ($http_user_agent ~ Safari) {#需要进行的操作}
④判断文件
判断文件是否存在
例如:
if ($request_filename) {#要进行的操作
}
⑤其他
-d !-d 判断请求的目录是否存在
-e !-e 判断请求的目录文件是否在使用
-x !-x 判断文件是否可执行
break指令
中断当前相同作用域中的配置,终止当前匹配并把当前的URI在location中进行重定向访问
location /break {set $username Tom;if ($args) {set $username JeEEy;break;set $usernaem ROSE;}add_header username $username;return 200 $username;}
return指令
完成对请求的处理
语法 | return code[text] ; return code URL ; return URL; |
---|---|
默认值 | --- |
位置 | server块,location块,if块 |
rewrite指令
通过正则表达式来改变URL,可以存在一个或者多个指令,按顺序对URL进行匹配和处理
语法 | rewrite regex replacement[flag]; |
---|---|
默认值 | -- |
位置 | server块,location块,if块 |
location /rewrite {rewrite ^/rewrite/url\w*$ https://www.baidu.com;rewrite ^/rewrite/(test)\w*$ /$1;rewrite ^/rewrite/(demo)\w*$ /$1;
}location /test {return 200 "this is test";
}location /demo {return 200 "this is demo";
}
flag选项
选项 | 含义 |
---|---|
last | 停止处理后续的 rewrite 指令,并重新搜索匹配的 location 块 |
break | 停止处理后续的 rewrite 指令,但不再重新搜索匹配的 location 块 |
redirect | 返回 302 临时重定向,而不是直接修改请求的 URI |
permanent | 返回 301 永久重定向,而不是直接修改请求的 URI |
rewrite_log指令
是否打开URL重写日志输出功能
语法 | rewrite_log on|off; |
---|---|
默认值 | off |
位置 | http块,server块,location块,if块 |
rewrite_log on;error_log /var/log/nginx/error.log notice;
Rewrite应用场景
域名跳转
为主机准备三个域名:
192.168.188.10 www.apple.com
192.168.188.10 w.apple.com
192.168.188.10 ww.apple.com
修改配置文件:
server {listen 801;server_name www.apple.com;location / {default_type text/html;return 200 "<h1>This is www.apple.com</h1>";}error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}
}
#设置域名跳转
server {listen 801;server_name www.monkey.com www.orange.com ;rewrite ^/(.*) http://www.apple.com$1 ;}
独立域名
使用不同目录来实现下面不同功能
http://search.monkey.com 商品搜索模块
http://item.monkey.com 商品详情模块
http://cart.monkey.com 商品购物车模块
配置
#商品搜索模块
server {listen 81;server_name search.monkey.com;rewrite ^(.*) http://www.monkey.com$1;
}
#商品详情模块
server {listen 82;server_name item.monkey.com ;rewrite ^/(.*) http://www.monkey.com$1 ;}
#商品购物车模块
server {listen 83;server_name cart.monkey.com ;rewrite ^/(.*) http://www.monkey.com$1 ;
}
#资源模块
server {listen 80;server_name www.monkey.com ;default_type text/plain;location /search {return 200 "this is search module";}location /item {return 200 "this is item module";
}location /cart {return 200 "this is cart module";
}
}