当前位置:首页 > Web开发 > 正文

包括0.8.20及之前的版本中

2024-03-31 Web开发

nginx之旅(第五篇):URL重写

一、URL重写介绍

URL重写是指将一个URL请求从头写成网站可以措置惩罚惩罚的另一个URL的过程。这样说可能不是很好理解,举个例子来说明一下,在开发中可能经常遇到这样的需求,好比通过浏览器请求的:8080/getUser?id=1,但是需要通过SEO优化等等原因,需要把请求的地点重写为:8080/getUser/1这样的URL,从而切合需求或者更好的被网站阅读。

当遇到这种请求的时候,就需要使用到UrlRewrite重写或者使用一些网关路由,如SpringCloud的Gateway,Zuul,又或者是Nginx来实现这个成果。

和apache等web处事软件一样,rewrite的主要成果是实现URL地点的重定向。Nginx的rewrite成果需要PCRE软件的撑持,即通过perl兼容正则表达式语句进行法则匹配的。默认参数编译nginx就会撑持rewrite的模块,但是也必需要PCRE的撑持。

rewrite和location的成果有点相像,都能实现跳转,主要区别在于rewrite常用于同一域名内变动获取资源的路径,而location是对一类路径做控制访谒和反向代办代理,可以proxy_pass到其他处事器。

Nginx供给的全局变量或本身设置的变量,结合正则表达式和标识表记标帜位实现url重写以及重定向。 rewrite只能放在server{},location{},if{}中, 并且只能对域名后边的撤除通报的参数外的字符串起感化。

Rewrite主要的成果就是实现URL的重写,Nginx的Rewrite法则给与Pcre,perl兼容正则表达式的语规则则匹配,如果需要Nginx的Rewrite成果,在编译Nginx之前,需要编译安置PCRE库。 通过Rewrite法则,可以实现规范的URL、按照变量来做URL转向及选择配置。

二、URL重写应用场景

域名变换 (京东)

用户跳转 (从某个连接跳到另一个连接)

伪静态场景 (便于CDN缓存动态页面数据)

三、URL重写语法 URL重写语法

rewrite <regex> <replacement> [flag]; ? 关键字 正则 替代内容 flag符号 ? ? regex :可以使用正则或者字符串来暗示相匹配的地点。 replacement:可以暗示重定向的地点。 flag :flag标识表记标帜的感化是用于控制当匹配到对应的rewrite法则后是否继续查抄后续的rewrite法则。 flag值为如下四种,分袂是: ? last:遏制措置惩罚惩罚当前的rewrite指令集,而后通过重写后的法则从头倡议请求,浏览器地点栏URL地点不乱。 break:和break指令一样,都是遏制措置惩罚惩罚当前上下文中的其他重写模块指令。 redirect:如果替换字符串不以“ ”,“ https://”或“ $scheme” 开头,返回带有302代码的姑且重定向,浏览器地点会显示跳转后的URL地点。 permanent:返回301代码的永久重定向,浏览器地点栏会显示跳转后的URL地点。

  


?
rewrite参数的标签可使用的位置

应用位置:server、location、if

nginx rewrite指令执行挨次

1.执行server块的rewrite指令(这里的块指的是server关键字后{}包抄的区域,其它xx块类似) 2.执行location匹配 3.执行选定的location中的rewrite指令

如果此中某步URI被重写,则从头循环执行1-3,直到找到真实存在的文件。

如果循环赶过10次,则返回500 Internal Server Error错误。

1) set设置变量量

所有的 Nginx变量在 Nginx 配置文件中引用时都须带上 $ 前缀

在 Nginx 配置中,变量只能存放一种类型的值,有且也只存在一种类型,那就是字符串类型

set指令 自界说变量量 Syntax: set $variable value; set关键字 $变量名 变量值 Default: — Context: server, location,

  

例:

访谒主机ip原来应该进入 重写为 location / { set $name Nicholas0707; rewrite ^(.*)$ $name; }

  

变量创建,赋值及感化域问题

变量的创建和赋值操纵产生在全然差此外时间阶段。Nginx 变量的创建只能产生在 Nginx 配置加载的时候,或者说 Nginx 启动的时候;而赋值操纵则只会产生在请求实际措置惩罚惩罚的时候。这意味着不创建而直接使用变量会导致启动掉败,同时也意味着我们无法在请求措置惩罚惩罚时动态地创建新的 Nginx 变量。

Nginx 变量一旦创建,其变量名的可见范畴就是整个 Nginx 配置,甚至可以跨越差别虚拟主机的 server 配置块

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/31391.html