Nginx 重写规则错过第二个捕获组

问题描述 投票:0回答:1

我正在尝试通过 Nginx 将我的 MediaWiki 站点地图 URL 重写到 S3 上的正确位置,因为 MediaWiki 生成带有如下 URL 的 sitemap.xml 页面:

https://subdomain.domain.net/databasename/sitemaps/sitemap-databasename-NS_0-0.xml.gz
;它们在 S3 中的格式相同,只是域是“static.domain.net”而不是实际站点的子域。

我尝试了几种不同的重写规则,但这个规则让我最接近我需要的:

        location ~ /([^/]+)/sitemaps/(sitemap-[^\/]+\.xml\.gz)$ {
        rewrite https://static.domain.net/$1/sitemaps/$2 permanent;
        }

但这会将 url 重写为:

https://static.domain.net/databasename/sitemaps/
,没有第二个捕获组。我已经测试了 regex101 中的正则表达式,它似乎确实匹配这两个组,但由于某种原因,Nginx 在重定向时缺少第二个捕获组 - 是什么原因导致的?我只需要捕获这两个组并将 URL 重定向到 static.domain.net 而不是 subdomain.domain.net。

nginx nginx-location
1个回答
0
投票
 location ~ /([^/]+)/sitemaps/(sitemap-[^\.]+\.xml\.gz)$ {
     rewrite https://static.domain.net/$1/sitemaps/$2 permanent;
 }

你的正则表达式很贪婪。

© www.soinside.com 2019 - 2024. All rights reserved.