nginx—rewrite功能
目录
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";
}
}