百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Nginx基础知识之rewrite反向代理规则

wxin55 2024-11-13 13:22 10 浏览 0 评论

location ~ .*\.(sh|bash)?$ {

return 403;

}

~是区分大小写的匹配。

? 是匹配前面的字符零次或者一次。

状态码403是Fobidden,表示服务器已经理解请求,但是拒绝执行它。

访问的URL以.sh或.bash结尾,则返回状态码403。

403表示服务器已经理解请求,但是拒绝执行它。

---我是华丽的分隔线---

rewrite指令的语法是:

rewrite regex replacement flag

关键字 正则表达式 替换部分 标记

if ($host ~* www\.(.*) {

set $host_without_www $1;

rewrite ^(.*)$ http://$host_without_www$1 permanent;

}

这里把server_name的主机名,去掉www的后面部分,赋值给了变量$host_without_www。

重写表达式只对相对路径有效,配对主机名,应该使用if语句。

permanent是返回301永久重定向。

这里的$1是/foo,而不是www.mydomain.com/foo。

---我是华丽的分隔线---

rewrite指令的最后一项参数是flag标记,支持的标记有:

last:相当于apache里面的[L],表示完成rewrite。

break:本条规则匹配完成后,终止匹配,不再匹配后面的规则。

redirect:返回302临时重定向。

permanent:返回301永久重定向。

其中last和break用来实现URL重写,浏览器地址栏的URL地址不变;redirect和permanent浏览器的地址栏会显示跳转之后的URL地址。

一般使用alias指令时,必须要用last指令;使用proxy_pass指令时要用break标记。last标记在本条规则执行完毕后,会对其所在的server {…}标签重新发起请求,而break标记则在本条规则匹配完毕后,终止匹配,不再匹配后面的规则。

一般在根location中,即location/{……}或者直接在server标签中编写rewrite规则,使用last标记,在非根location中,则使用break标记。

---我是华丽的分隔线---

/photos/123456重定向到:

/path/to/photos/12/1234/123456.png 可以使用大括号进行分割代码块。

可以用下面的方法:

rewrite "/photos/([0-9]{2})([0-9]{2})([0-9]{2})"

/path/to/photos/$1/$1$2/$1$2$3.png;

[0-9]匹配数字

{n}表示重复几次。

nginx rewrite指令的写法是:

rewrite regex replacement flag

-----我是华丽的分隔线----

*匹配前面的表达式零次或者多次

+匹配前面的表达式一次或者多次

?匹配前面的子表达式零次或者一次

---我是华丽的分隔线----

set variable value

set指令用来定义一个变量,并且给变量赋值。

多目录转换成参数abc.domain.com/sort/2 => abc.domain.com/index.php?act=sort&name=abc&id=2:

if ($host ~* (.*)\.domain\.com) {

set $sub_name $1;

rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id=$1 last;

}

这里~*不区分大小写匹配。

sub_name变量设置的值是域名的前缀abc。

\/反斜杠\用来转义斜杠。

\d匹配一个数字字符,等价于[0-9]

+匹配前面的字符一次或者多次

?匹配前面的字符零次或者一次。

\/?匹配URL末尾有/或者没有/。

rewrite表达式中,把(\d+)赋值给了id,其实就是id=2。

---我是华丽的分隔线---

目录对换:

/123456/xxxx->/xxxx?id=123456:

rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;

这里\d匹配1个数字字符,等价于[0-9]。

+匹配前面的字符一次或者多次。

.点匹配任意一个单字符,+匹配前面的字符一次或者多次。

一般在根location中,即location/{……}或者直接在server标签中编写rewrite规则,使用last标记,在非根location中,则使用break标记。

---我是华丽的分隔线---

如果apache的rewrite规则改成nginx的rewrite规则后,使用nginx -t 命令检查发现nginx.conf配置文件有语法错误,那么主要是大括号引起的,那么可以尝试给条件加上引号。

---我是华丽的分隔符----

①:Apache的RewriteCond指令对应Nginx的if指令;

②:Apache的RewriteRule指令对应Nginx的rewrite指令;

③:Apache的[R]标记对应nginx 的redirect标记;

④:Apache的[P]标记对应Nginx的last标记;

⑤:Apache的[R,L]标记对应Nginx的redirect标记;

⑥:Apache的[P,L]标记对应Nginx的last标记。

⑦:Apache的[PT,L]标记对应Nginx的last标记。

鼓励的话语:强者从不抱怨环境!

相关推荐

ES6中 Promise的使用场景?(es6promise用法例子)

一、介绍Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码doSomething(f...

JavaScript 对 Promise 并发的处理方法

Promise对象代表一个未来的值,它有三种状态:pending待定,这是Promise的初始状态,它可能成功,也可能失败,前途未卜fulfilled已完成,这是一种成功的状态,此时可以获取...

Promise的九大方法(promise的实例方法)

1、promise.resolv静态方法Promise.resolve(value)可以认为是newPromise方法的语法糖,比如Promise.resolve(42)可以认为是以下代码的语...

360前端一面~面试题解析(360前端开发面试题)

1.组件库按需加载怎么做的,具体打包配了什么-按需加载实现:借助打包工具(如Webpack的require.context或ES模块动态导入),在使用组件时才引入对应的代码。例如在V...

前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?

Promise的finally方法是一个非常有用的工具,它无论Promise是成功(fulfilled)还是失败(rejected)都会执行,且不改变Promise的最终结果。它的实现原...

最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式

看了全网手写Promise的,大部分对于新手还是比较难理解的,其中几个比较难的点:状态还未改变时通过发布订阅模式去收集事件实例化的时候通过调用构造函数里传出来的方法去修改类里面的状态,这个叫Re...

前端分享-Promise可以中途取消啦(promise可以取消吗)

传统Promise就像一台需要手动组装的设备,每次使用都要重新接线。而Promise.withResolvers的出现,相当于给开发者发了一个智能遥控器,可以随时随地控制异步操作。它解决了三大...

手写 Promise(手写输入法 中文)

前言都2020年了,Promise大家肯定都在用了,但是估计很多人对其原理还是一知半解,今天就让我们一起实现一个符合PromiseA+规范的Promise。附PromiseA+规范地址...

什么是 Promise.allSettled()!新手老手都要会?

Promise.allSettled()方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的pr...

前端面试-关于Promise解析与高频面试题示范

Promise是啥,直接上图:Promise就是处理异步函数的API,它可以包裹一个异步函数,在异步函数完成时抛出完成状态,让代码结束远古时无限回掉的窘境。配合async/await语法糖,可...

宇宙厂:为什么前端离不开 Promise.withResolvers() ?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.为什么需要Promise.with...

Promise 新增了一个超实用的 API!

在JavaScript的世界里,Promise一直是处理异步操作的神器。而现在,随着ES2025的发布,Promise又迎来了一个超实用的新成员——Promise.try()!这个新方法简...

一次搞懂 Promise 异步处理(promise 异步顺序执行)

PromisePromise就像这个词的表面意识一样,表示一种承诺、许诺,会在后面给出一个结果,成功或者失败。现在已经成为了主流的异步编程的操作方式,写进了标准里面。状态Promise有且仅有...

Promise 核心机制详解(promise机制的实现原理)

一、Promise的核心状态机Promise本质上是一个状态机,其行为由内部状态严格管控。每个Promise实例在创建时处于Pending(等待)状态,此时异步操作尚未完成。当异步操作成功...

javascript——Promise(js实现promise)

1.PromiseES6开始支持,Promise对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示。简单说就是处理异步请求的。之所以叫Promise,就是我承诺,如果成功则怎么处理,失败怎...

取消回复欢迎 发表评论: