您现在的位置是:自如初>NginxNginx

Nginx使用rewrite重写url

温新 2021-10-01 21:05:27 Nginx 6302人已围观

简介Nginx使用rewrite重写url

作者:温新

时间:2021-03-02

rewrite语法

rewrite  regex replacement [flag];
# 关键字   正则   替代内容   flag标记

默认值:none

应用位置:server、location、if

flag标记有如下几个选项:

flag含义
last本条规则匹配完成后,继续向下匹配新的location url规则
break本条规则匹配完成后立即终止,不再向后匹配任何规则
redirect302临时重定向,浏览器地址会显示跳转后的url地址
permanent301永久重定向,浏览器地址栏会显示跳转后的url地址

案例

# 将所有访问永久重定向到 www.ziruchu.com
rewrite ^/(.*) https://www.ziruchu.com permanent;

应用场景

1)url静态化,利于被搜索引擎收录,用户体验更好

2)网站域名更换

常用正则表达式

字符含义
\将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符
^匹配输入字符串的起始位置
$匹配输入字符串的结束位置
*匹配前面的字符零次或者多次
+匹配前面字符串一次或者多次
?匹配前面字符串的零次或者一次
.匹配除换行符 \n 之外的任何单字符
( )标记一个子表达式的开始和结束位置

其他指令

if指令

语法:if ( condition ) {}

功能:条件判断。

参数:condition判断条件为 true/false。condition有如下几个判断条件:

1、变量名。若变量值为空字符串或以“0”开头的任意字符,if指令默认为false;

if ($name) { }

2、=或!=比较变量和字符串是否相等,相等为true,否则为false

if ($request_method == POST) { }

注意:字符串(POST)不需要加引号

3、使用正则对变量进行匹配,成功为true,否则为false

变量与正则表达式之间使用~、~*、!~、!~*连接。~表示大小写敏感,~*大小写不敏感,!~/~!~*匹配失败时为true,否则为false。

if ($http_user_agent ~ MSIE) {
   # $http_user_agent的值中是否包含MSIE字符串,若有则返回true
}

4、-f或!-f判断请求文件是否存在

if (-f $request_filename) {
   # 判断请求文件是否存在
}

if (!-f $request_filename) {
   # 判断请求文件是否不存在
}

5、-d或!-d 判断请求的目录是否存在

-d时,请求为目录,返回true,否则为false;

!-d时,若请求的目录不存在,但该目录存在上级目录,返回true;若该目录和上级目录都不存在,返回false;若请求的目录存在,返回false。

6、-e 或 !-e 判断文件或目录是否存在

-e时,若请求的目录或文件存在,则返回true,否则为false;

!-e时,若请求的文件和所在路径上的目录都不存在,返回true,否则返回false。

7、-x 或 !-x 判断文件是否可执行

-x时,若请求文件可执行,返回true;

!-x时,若请求文件不可执行,返回true。

break指令

语法:break

功能:结束该层的匹配

使用范围:使用在server块和location块以及if块

案例:

server {
   location / {
       if ($slow) {
           set $id $s1;
           break; # 中断 if 块之后的指令
           limit_rate 10k; # 该指令不会生效
       }
       # 此处,对于其他指令依旧生效
   }
}

return指令

语法:

# 方式一
return [text]
# 方式二
return code URL;
# 方式三
return URL;

功能:用于完成对请求的处理,直接向客户端返回响应状态代码。处于该指令后的所有nginx配置都是无效的。

使用范围:server location if

参数:

text,返回给客户端的内容;

code,返回给客户端HTTP状态码;

URL,返回客户端的url地址。

rewrite_log

语法:rewrite_log on | off

功能:是否开启URL重写日志的输出功能。默认为off。

说明:URL重写的相关日志将以notice级别输出到error_log指令配置的日志文件中。

set

语法:set $variable value

功能:用于设置一个新变量

参数:

variable,为变量名;

value:变量值

案例:set $age 19

uninitialized_variable_warn

语法:uninitialized_variable_warn on | off

功能:用于设置配置使用未初始化的变量时,是否记录警告日志。默认为on。

rewrite常用全局变量

变量说明
$args变量中存放请求URL中的请求指令。 如a.com/a?a=1&b=2中的a=1&b=2的部分
$content_length变量中存放请求头中的Content-length字段
$content_type请求头中的Content-type字段
$document_root当前请求的根路径
$document_uri当前请求uri,如http://www.a.com/art?a=1中的/art
$host请求url中的主机部分,https://www.zifuchu.com中的www.ziruchu.com
$http_user_agent客户端的代理信息
$http_cookie客户端的cookie信息
$limit_ratenginx服务器对网络连接速率的限制
$remote_addr客户端IP
$remoet_port客户端端口
$remote_user客户端用户名
$request_body_file本地文件资源名称
$request_method请求方法,如GET、POST
$request_filename当前请求的资源文件的路径名
$request_uri当前请求uri并携带请求指令
$query_string请求参数
$scheme客户端请求协议,如http、https、ftp
$server_protocol客户端请求协议版本,如http/1.0,http/1.1
$server_addr服务器地址
$server_name服务器名称
$server_port服务器端口号
$uri与$document_uri相同

rewrite重定向案例

将所有请求重定向到指定地址

rewrite ^/ https://www.ziruchu.com;

带路径重定向

server {
   listen 192.168.133.128:8080;
   location / {
       if ($host ~ :8080/demo01/) {
           rewrite ^(.*) https://www.test.com$1 permanent;
       }
   }
}

当案例中,当访问192.168.133.128:8080/demo01会重定向到https://www.test.com/demo01


url伪静态化

server {
   root /www/demo01;
   listen 192.168.133.128:8080;
   location ^~ /art {
       rewrite /art-(\d+)\.htm /art/$1.html permanent;
       break;
   }  
}

当访问192.168.133.128:8080/art-11.html时会重定向到192.168.133.128:8080/art/11.html


我是温新

每天进步一点点,就一点点

很赞哦!(9)

文章评论

登录 注册

自如初--时间轴

QQ登录

站名:自如初

独白:向前走!向前走!

邮箱:xyhcx@foxmail.com

站点信息