Nginx的rewrite指令
Nginx的rewrite指令
rewrite 指令在Nginx中用于对请求的URI进行重写操作,通过正则表达式来匹配和替换请求路径。这在需要调整请求路径或进行URL重定向时非常有用。以下是关于Nginx rewrite 指令的详细介绍:
基本语法
rewrite 指令一般用于 server、location 或 if 块中,其基本语法如下:
rewrite regex replacement [flag];
-
regex:要匹配的正则表达式。 -
replacement:替换后的URI。 -
flag:用于控制重写操作的标志。
常用标志
-
last:- 终止当前
rewrite 指令,并祛除余下所有规则的执行。服务将在新位置重新开始搜索请求。 - 类似于 Apache 的
L 标志。
- 终止当前
-
break:- 终止当前
rewrite 指令的执行,但不进行位置重新搜索。
- 终止当前
-
redirect:- 返回302临时重定向到重新写的URI(替换后的URI)。强制浏览器使用替换URI重新请求。
-
permanent:- 返回301永久重定向到替换后的URI。
示例
-
基本重写:
rewrite ^/images/(.*)\.jpg$ /pics/$1.png;将
/images/example.jpg 重写为/pics/example.png。 -
重定向:
rewrite ^/oldpath/(.*)$ /newpath/$1 permanent;将
/oldpath/anything 重定向(301)为/newpath/anything。 -
使用
last标志进行重写:server { listen 80; server_name example.com; location / { rewrite ^/foo/(.*)$ /bar/$1 last; } }如果请求为
/foo/item,会被重写为/bar/item,然后Nginx会对/bar/item 再进行匹配。 -
条件重写(if 块) :
if ($http_user_agent ~* "MSIE") { rewrite ^(.*)$ /msie.html break; }如果请求是来自IE浏览器,重写任何请求到
/msie.html。
注意事项
-
rewrite 指令的执行顺序是在请求的处理规则前面,这意味着它在location 块内的许多指令之前被执行。 - 使用
if条件时应小心,因为不当使用可能导致不必要的性能影响或者逻辑错误。 -
rewrite指令一般用于简单的URI重写场景,对于更复杂的请求处理逻辑,通常结合Nginx的其他高级特性来实现。
通过正确使用 rewrite 指令,可以优化URL结构,提高SEO效果,或者将请求重定向到新的服务路径。

浙公网安备 33010602011771号