nginx rewrite 语法
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 语法的更多相关文章
- Nginx Rewrite语法详解
重写中用到的指令 if (条件) {} 设定条件,再进行重写 set #设置变量 return #返回状态码 return 403; break #跳出rewrite rewrite #重写 I ...
- 【nginx运维基础(6)】Nginx的Rewrite语法详解
概述 重写URL是非常有用的一个功能,因为它可以让你提高搜索引擎阅读和索引你的网站的能力:而且在你改变了自己的网站结构后,无需要求用户修改他们的书签,无需其他网站修改它们的友情链接:它还可以提高你的网 ...
- Nginx教程(四) Location配置与ReWrite语法
Nginx教程(四) Location配置与ReWrite语法 1 Location语法规则 1.1 Location规则 语法规则: location [=|~|~*|^~] /uri/ {- } ...
- Nginx网络架构实战学习笔记(一):Nginx简介、安装、信号控制、nginx虚拟主机配置、日志管理、location 语法、Rewrite语法详解
文章目录 nginx简介 nginx安装 nginx信号控制 nginx虚拟主机配置 日志管理 location 语法 精准匹配的一般匹配 正则匹配 总结 Rewrite语法详解 nginx简介 Ng ...
- Nginx教程(四) Location配置与ReWrite语法 (转)
Nginx教程(四) Location配置与ReWrite语法 1 Location语法规则 1.1 Location规则 语法规则: location [=|~|~*|^~] /uri/ {… } ...
- nginx location语法使用说明
语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因 ...
- Nginx Location 语法,与简单配置[转]
一、介绍Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器 ...
- nginx——rewrite模块
1.什么是Nginx的Rewrite规则? Rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE(Perl Compatible Regular Expressio ...
- Nginx Rewrite规则初探(转)
Nginx rewrite(nginx url地址重写)Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用Pcre,perl兼容正则表达式的语法规则匹配,如果需要Ng ...
- Nginx Rewrite规则记录
Rewrite 是一种服务器的重写脉冲技术,它可以使得服务器可以支持 URL 重写,是一种最新流行的服务器技术.它还可以实现限制特定IP访问网站的功能.很多情况下,某个 IP 的访问很容易造成 CPU ...
随机推荐
- 设计模式学习-使用go实现中介者模式
中介模式 定义 优点 缺点 适用范围 代码实现 参考 中介模式 定义 中介模式(Mediator):用一个中介对象来封装一系列的对象交互.中介者使个各对象不需要显示的相互引用,从而使其藕合松散,而且可 ...
- C/C++ Npcap包实现ARP欺骗
npcap 是Nmap自带的一个数据包处理工具,Nmap底层就是使用这个包进行收发包的,该库,是可以进行二次开发的,不过使用C语言开发费劲,在进行渗透任务时,还是使用Python构建数据包高效,唯一的 ...
- 多路io复用pool [补档-2023-07-19]
多路IO- poll 3.1简介 poll的机制与select类似,他们都是让内核在以线性的方法对文件描述符集合进行检测,根据描述符的状态进行具体的操作.并且poll和select在检测描述符集合 ...
- 宝塔 websocket连接wss配置
https要使用wss连接,wss://xxxxx.com/wss 就转发到了 服务器内的127.0.0.1:2346服务. 具体转发可以放在 文件配置或者 伪静态里面 建议放在伪静态里面容易管理 n ...
- CH58x/CH57x硬件SPI操作外部flash学习记录
官方提供的58x的spi例程,spi主机模式下的发送方式有三种单字节发送,FIFO连续发送,DMA连续发送.本文分别对SPI0主机模式下三种发送模式进行使用. 本次使用的是CH582m做为主机,W25 ...
- (C语言)关于printf的新发现: 可以用字符串变量替代第一个字符串参数
char a[] = "hello%d\n%dworld"; printf(a, 2, 3); //输出: //hello2 //2world 事情的起因是使用printf(&qu ...
- 2.3 实验:用linxerUnpack进行通用脱壳--《恶意代码分析实战》
Lab01-03.exe 实验内容: 1.将文件上传到http://www.VirusTotal.com 进行分析并查看报告.文件匹配到了已有的反病毒软件特征吗? 2.是否有这个文件被 ...
- 永久解决 WSL vm.max_map_count 65530 is too low 的问题
问题 在使用基于 WSL 的 Docker 的时候,启动 ES 总是会出现 vm.max_map_count 65530 is too low 问题,导致容器无法启动,网上答案基本就两种,例如 sta ...
- CF383C Propagating tree
题目链接 题目 见链接. 题解 知识点:DFS序,树状数组. 我们需要对子树的不同奇偶层加减,用dfn序可以解决子树问题,但是并不能直接分奇偶. 一种比较麻烦的思路是,将dfn序分成两个序列,一个是偶 ...
- C++ 析构函数的调用顺序
如果指针指向基类,但是指针在运行时指向派生类,则该基类必须具有虚拟析构函数,以便破坏派生类.如果没有虚拟析构函数,则只会运行基类的析构函数. 比如: Base* basePtr; basePtr = ...