跳转至

internal-redirect:内部重定向到指定的 URI

安装

你可以在任何基于 RHEL 的发行版中安装此模块,包括但不限于:

  • RedHat Enterprise Linux 7、8、9 和 10
  • CentOS 7、8、9
  • AlmaLinux 8、9
  • Rocky Linux 8、9
  • Amazon Linux 2 和 Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-internal-redirect
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-internal-redirect

将以下内容添加到 /etc/nginx/nginx.conf 的顶部以启用该模块:

load_module modules/ngx_http_internal_redirect_module.so;

本文档介绍 nginx-module-internal-redirect v1.0.1 发布于 2026 年 3 月 8 日。


server {
    listen 127.0.0.1:80;
    server_name localhost;

    location /old {
        internal_redirect -i ^/old(.+) /new$1 phase=preaccess;
    }

    location /new {
        return 200 'current uri is: $uri';
    }
}

指令

internal_redirect

语法: internal_redirect [-i] pattern replacement [phase=] [flag=] [if= | if!=]

默认值: -

上下文: http、server、location

设置用于请求内部重定向的新 URI。也可以使用命名 location 代替 URI。替换值可以包含变量。如果 uri 值为空,则不会进行重定向。内部重定向发生后,请求 URI 将被更改,请求将返回到 NGX_HTTP_SERVER_REWRITE_PHASE(server_rewrite)阶段。请求将使用服务器默认 location 继续处理。随后在 NGX_HTTP_FIND_CONFIG_PHASE(find_config)阶段,将根据新的请求 URI 选择新的 location。

有关 nginx 请求阶段的更多信息,请参阅 Development guide#http_phases

可选的 -i 参数指定应执行不区分大小写的正则表达式匹配。

可选的 phase= 参数用于指示此规则在哪个阶段生效。可能的值为 preaccess、access、precontent 和 content。每个阶段的规则将在执行内部重定向之前完全执行。默认值为 preaccess。

可选的 flag= 参数用于在评估规则后执行附加操作。此参数的值可以是以下之一: * break 停止处理当前阶段的当前规则集,并立即执行内部重定向; * status_301 返回 301 代码的重定向。 * status_302 返回 302 代码的重定向。 * status_303 返回 303 代码的重定向。 * status_307 返回 307 代码的重定向。 * status_308 返回 308 代码的重定向。

if 参数启用条件重定向。如果条件求值为“0”或空字符串,则请求不会被重定向。你也可以使用 if!= 形式来进行否定判断。