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效果,或者将请求重定向到新的服务路径。