nginx rewrite 语法

一 定义

Rewrite主要实现url地址重写, 以及地址重定向,就是将用户请求web服

务器的地址重新定向到其他URL的过程。

二 语法格式

reweite fiag 标记
break 中断,结束, 本条规则匹配完成后,重新发出请求,
通过新的uri进行匹配
location内部跳转
last 持续 本条规则匹配完成后,停止匹配,不在匹配后
面的规则
location 内部跳转
redirect 重定向:临时 302 持续的 来回
permanent 重定向:永久 301 持续的 来回

二 简单使用

if常用的条件及格式

条件 取反
= 精确匹配 一模一样 等于 !=
~ 过滤 支持正则 区分大小写 !~
~* 过滤 支持正则 不区分大小写 !~*
-d 判断目录是否存在
-f 判断文件是否存在
-x 判断是否有执行权限
-e 运算符检查文件,目录或符号链接是否存在

--nginx内置变量--

nginx内置变量
$http_user_agent 客户端浏览器
$request_uri 用户请求的uri(包含参数)
$host 用户访问Host内 域名
$remote_addr 用户的ip地地址
$args 只取出请求行里面的参数部分
$http_name name是http请求报文中的内容
$http_host $http_host为何查询不到???
$http_accept_language

2.1 if 判断浏览器类型返回值

#01 书写配置文件
[root@node02 conf.d]# cat if.conf
server {
listen 80;
server_name rewrite.zhangyuzhou.com;
root /code/rewrite;
index index.html;
default_type text/html;
if ( $http_user_agent ~* "spider|bot" ){
return 403 "别来了!!";
}
} #02 创建站点目录
mkdir -p /code/rewrite
echo 123 >>/code/rewrite/index.html #03 访问测试
curl -A zhangbingbingbot -H:rewrite.zhangyuzhou.com rewrite.zhangyuzhou.com 10.0.0.102 别来了!!别来了!! 解释含义
如果用户客户端spider或者bot (含包括这两个)访问,则返回403 “别来了” curl
-A 指定代理 设置Http请求头“User-Agent”的部分
-H 添加一个http header(http请求头);

2.2 set 变量的使用

##语法
Syntax: set $variable value;
Default: —
Context: server, location, if # 使用方法
set $zhangyuzhou "zhang"; 设置zhangyuzhou变量 = zhangyuzhou
return 200 $zhangyuzhou ; 返回码 200 然后加上$zhangyuzhou变量的内容 "zhang" #01 需求
用户请求rewrite.zhangyuzhou.com.cn 用户访问 /code/rewrite/cn/index.html
用户请求rewrite.zhangyuzhou.com.jp 用户访问 /code/rewrite/jp/index.html #02 配置文件
[root@node02 conf.d]# cat set.conf
server {
listen 80;
server_name rewrite.zhangyuzhou.com;
root /code/rewrite;
index index.html;
default_type text/html;
if ( $host ~ '\.cn$' ) {
rewrite ^/ http://rewrite.zhangyuzhou.com/cn/;
}
if ( $host ~ '\.jp$' ) {
rewrite ^/ http://rewrite.zhangyuzhou.com/jp/;
}
} #03 访问测试
[root@node02 conf.d]# curl -H Host:rewrite.zhangyuzhou.com.cn 10.0.0.102 -L
zhangyuzhou cn
[root@node02 conf.d]# curl -H Host:rewrite.zhangyuzhou.com.jp 10.0.0.102 -L
zhangyuzhou j

2.3 return返回功能

#语法:
return code [text]; 状态码 内容(文本 定向新的url)
return 内容(文本 定向新的url)
return code URL;
return URL;
Default: —
Context: server, location, if #01 #需求1:如果用户使用ie浏览器访问rewrite.zhangyuzhou.com则返回值字符串. #02 书写配置文件
[root@node02 conf.d]# cat return.conf
server {
listen 80;
server_name rewrite.zhangyuzhou.com;
root /code/rewrite;
index index.html;
default_type text/html;
if ($http_user_agent ~* "MSIE") {
return 200 "请更换浏览器 使用edge/chrome/fire...";
}
} mkdir -p /code/rewrite
echo 1 >/code/rewrite/index.html [root@node02 conf.d]# curl -A MSIE -Host:rewrite.zhangyuzhou.com rewrite.zhangyuzhou.com 10.0.0.102
请更换浏览器 使用edge/chrome/fire...请更换浏览器 使用edge/chrome/fire...

2.4 rewrite跳转功能

  • 基础语法
Syntax: rewrite regex replacement [flag];

rewrite   正则   替换成什么   [标记]; # 把regex 替换成replacement 标记[]
sed 's#正则#替换成什么# g'
reweite fiag 标记
break 中断,结束, 本条规则匹配完成后,重新发出请求,
通过新的uri进行匹配
location内部跳转
last 持续 本条规则匹配完成后,停止匹配,不在匹配后
面的规则
location 内部跳转
redirect 重定向:临时 302 持续的 来回
permanent 重定向:永久 301 持续的 来回
  • 多重匹配
#01 匹配
[root@node02 conf.d]# cat url.conf
server {
listen 80;
server_name url.zhangyuzhou.com;
root /code/url; location / {
rewrite /1.html /2.html ;
rewrite /2.html /3.html ;
}
location /2.html {
rewrite /2.html /4.html ;
}
location /3.html {
rewrite /3.html /a.html ;
}
} [root@node02 conf.d]# curl url.zhangyuzhou.com/1.html
a.html url 解释下:匹配 1.html ---2.html ---- 3.html ---a.html
  • break
rewrite 标记
break 跳转完成后,停止匹配其他任何规则,直接返回结果
last 调整完成后,重新使用新的uri,发起请求
#break
break 结束执行,返回结果 #01 配置
[root@node02 conf.d]# cat url.conf
server {
listen 80;
server_name url.zhangyuzhou.com;
root /code/url; location / {
rewrite /1.html /2.html break ;
rewrite /2.html /3.html ;
}
location /2.html {
rewrite /2.html /4.html ;
}
location /3.html {
rewrite /3.html /a.html ;
}
} [root@node02 conf.d]# curl url.zhangyuzhou.com/1.html
2.html url
  • last
#停止处理当前location中的规则, 然后以新的uri在server中进行匹配

[root@node02 conf.d]# cat url.conf
server {
listen 80;
server_name url.zhangyuzhou.com;
root /code/url; location / {
rewrite /1.html /2.html last ;
rewrite /2.html /3.html ;
}
location /2.html {
rewrite /2.html /4.html ;
}
location /3.html {
rewrite /3.html /a.html ;
}
} [root@node02 conf.d]# curl url.zhangyuzhou.com/1.html
4.html url

nginx rewrite 语法的更多相关文章

  1. Nginx Rewrite语法详解

    重写中用到的指令 if  (条件) {}  设定条件,再进行重写 set #设置变量 return #返回状态码  return 403; break #跳出rewrite rewrite #重写 I ...

  2. 【nginx运维基础(6)】Nginx的Rewrite语法详解

    概述 重写URL是非常有用的一个功能,因为它可以让你提高搜索引擎阅读和索引你的网站的能力:而且在你改变了自己的网站结构后,无需要求用户修改他们的书签,无需其他网站修改它们的友情链接:它还可以提高你的网 ...

  3. Nginx教程(四) Location配置与ReWrite语法

    Nginx教程(四) Location配置与ReWrite语法 1 Location语法规则 1.1 Location规则 语法规则: location [=|~|~*|^~] /uri/ {- } ...

  4. Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解

    文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...

  5. Nginx教程(四) Location配置与ReWrite语法 (转)

    Nginx教程(四) Location配置与ReWrite语法 1 Location语法规则 1.1 Location规则 语法规则: location [=|~|~*|^~] /uri/ {… } ...

  6. nginx location语法使用说明

    语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因 ...

  7. Nginx Location 语法,与简单配置[转]

    一、介绍Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器 ...

  8. nginx——rewrite模块

    1.什么是Nginx的Rewrite规则? Rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE(Perl Compatible Regular Expressio ...

  9. Nginx Rewrite规则初探(转)

    Nginx  rewrite(nginx url地址重写)Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Ng ...

  10. Nginx Rewrite规则记录

    Rewrite 是一种服务器的重写脉冲技术,它可以使得服务器可以支持 URL 重写,是一种最新流行的服务器技术.它还可以实现限制特定IP访问网站的功能.很多情况下,某个 IP 的访问很容易造成 CPU ...

随机推荐

  1. 利用Docker、云服务器、mongodb搭建自己的测试平台

    准备一个云服务器 购买一个云服务器,在阿里云,腾讯云上购买即可. 然后创建一个实例,安装Linux操作系统,我安装的是CentOS. 记住账号和密码,可以使用ssh远程登录即可.   搭建测试环境 D ...

  2. P9474 [yLOI2022] 长安幻世绘题解

    题目链接: [yLOI2022] 长安幻世绘 比较不错的综合题.考虑下处理极差的绝对值我们应该怎么做,很显然排序是有必要的,我们需要带着下标排序. 考虑几个核心点: 1.假如没有其他限制考虑极差与序列 ...

  3. .NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ 业务场景详解)--学习笔记

    2.6.5 RabbitMQ -- 业务场景详解 异步处理 应用解耦 流量削锋 日志处理 异步处理 串行方式 并行方式 异步方式 串行方式 _userRepo.Add(user); _emailSer ...

  4. Go语言的100个错误使用场景(30-40)|数据类型与字符串使用

    目录 前言 4. 控制结构 4.1 忽视元素在range循环中是拷贝(#30) 4.2 忽略在 range 循环中如何评估表达式(#31) 4.3 忽略在 range 中使用指针元素的影响(#32) ...

  5. 实现阿里云模型服务灵积 DashScope 的 Semantic Kernel Connector

    Semantic Kernel 内置的 IChatCompletionService 实现只支持 OpenAI 与 Azure OpenAI,而我却打算结合 DashScope(阿里云模型服务灵积) ...

  6. 初次尝试GPU Driver —— 大范围植被渲染之着色

    初次尝试GPU Driver -- 大范围植被渲染之着色 在<初次尝试GPU Driven -- 大范围植被渲染>中实现了草地分布,本文实现草的着色. 本文分四个部分: 生成网格 随机调整 ...

  7. BZOJ3156 防御准备 题解

    原题 令 \(S_{i} =\sum\limits_{j=1}^{i}j\) , \(f_{i}\) 为处理到第 \(i\) 个位置放置守卫塔的最小花费. 观察题意,容易得到在\((1 \le j \ ...

  8. NC20812 绿魔法师

    题目链接 题目 题目描述 "我不知道你在说什么,因为我只是个pupil."--绿魔法师 一个空的可重集合S. n次操作,每次操作给出x,k,p,执行以下操作: 1.在S中加入x. ...

  9. 【分布式】load balance 02-consistent hash algorithm 一致性哈希算法原理详解

    负载均衡系列专题 01-负载均衡基础知识 02-一致性 hash 原理 03-一致性哈希算法 java 实现 04-负载均衡算法 java 实现 概念 一致哈希是一种特殊的哈希算法. 在使用一致哈希算 ...

  10. JavaFX的目录结构, 项目创建和发布, 基于JDK11+JavaFX SDK17

    JDK 和 JavaFX SDK 需要使用JDK11, 推荐使用 https://adoptium.net/releases.html JDK11 JavaFX 11 不再是JDK的一部分, 需要单独 ...