我正在尝试通过 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。
使用任一
或者
不要混淆语法 -
rewrite
将正则表达式作为第一个参数,并且不简单地重复使用外部上下文中的捕获组。