Nginx的rewrite重写配置


配置详解

URL的rewrite(重写)是Nginx的http请求处理过程中的一个重要功能,它能对用户请求的URL进行正则重写,然后返回30×重定向跳转或按条件执行相关配置。Nginx使用内置的ngx_http_rewrite_module模块解析和处理rewrite请求。

语法规则

  • rewrite 源URL 目标URL [选项];

配置说明

1、源URL:可以基于Perl兼容的正则表达式(PCRE)对用户请求源URL进行重写。

2、选项:用于控制重写行为,主要选项如下:

  • last:处理完当前规则后停止匹配,并根据重写的URL重新进行匹配。
  • break:执行重写请求,但不进行新的location匹配。
  • redirect:返回302,临时重定向,表示URL临时改变。
  • permanent:返回301,永久重定向,表示URL永久改变。

注意事项

1、rewrite指令针对不同的作用域可以配置在server和location块中:

  • server:配置在虚拟主机的server模块中,作用域为此虚拟主机的所有请求。
  • location:配置在虚拟主机的location模块中,作用域为与当前location匹配的所有请求。

配置示例

rewrite指令的基本用法

1、基于文件的重写:将一个文件的请求重定向至一个新文件。

nginx

2、基于路径的重写:将指定路径的请求重定向至一个新文件或新域名。

2.1、将指定路径的请求重定向至一个新文件。

nginx

2.2、将指定路径的请求重定向至一个新域名。

nginx

3、rewrite指令可以写在location中,也可写在server中,以下指令与2.1功能相同。

nginx

rewrite指令的常用选项

1、redirect:临时重定向,服务器返回状态码302,地址栏显示目标地址。

nginx

2、permanent:永久重定向,服务器返回状态码301,地址栏显示目标地址。

nginx

3、last:处理完当前规则后停止匹配,并根据重写的目标URL重新进行匹配。

nginx
  • rewrite /admin.html /admin/index.html:将请求/admin.html重定向至/admin/index.html。
  • last:对已重定向的目标路径/admin/index.html不再进行本模块的rewrite匹配,但会再次匹配location /admin/,所以最终显示的页面为/admin/index.html,而不是/error.html。

4、break:执行重写请求,但不对重写的目标URL进行新的location匹配。

nginx
  • rewrite /admin.html /admin/index.html:将请求/admin.html重定向至/admin/index.html。
  • break:对已重定向的目标路径/admin/index.html不再进行location匹配,所以/admin/index.html为最终显示的页面,而不是/error.html。

rewrite指令的高级用法

在rewrite指令中可以对匹配的源URL使用圆括号对匹配的字符串进行提取并在目标URL中进行回调使用,回调时使用$1、$2...对提取的字符串进行引用。

1、路径重写:将所有请求重定向至目标路径下。

nginx
  • ^/(.*)$:匹配所有请求并将请求中根路径/之后的内容提取。
  • /admin/$1:将提取的内容拼接在目标路径/admin/之后。
  • break:对已重定向的目标路径/admin/不再进行location匹配。

2、域名重写:将所有请求重定向至目标域名下。

nginx

发表评论

评论数量:0