首页 > 解决方案 > 尽管重定向有效,但 Nginx 位置中的匹配返回空 $1

问题描述

我是 Nginx 的新手,我需要永久重定向这样的 URL:

https://www.mywebsite.ext/mars/2015/mypage.php?foo=1&bar=0

给另一个这样的人:

https://www.mywebsite.ext/earth?year=2015&foo=1&bar=0

我尝试使用的位置指令(在 server{ ... } 内)如下:

location ~ ^/mars/([0-9]+)/mypage.php {
    return 301 $scheme://$server_name/earth?year=$1&$args;
}

一切正常,但 $1 为空,即在上面的示例中,重定向实际生成的 URL 是:

https://www.mywebsite.ext/earth?year=&foo=1&bar=0

(“年份”的值应该是“2015”)

我做错了什么?我怎样才能实现目标?

标签: regexnginx

解决方案


如上所述,您可以改用命名捕获组:(?<year>[0-9]+)然后$year在重定向中使用 var。

location ~ ^/mars/(?<year>[0-9]+)/mypage.php {
    return 301 $scheme://$server_name/earth?year=$year&$args;
}

推荐阅读