具有位置和正则表达式的 Nginx:url 包含到 http 服务器的字符串,附加整个路径

Nginx with location and regex: url containing string to http server, appending whole path

让我们留下来,我在 https://www.example.com 有一个网站 我希望 Nginx 将包含 /rss/ 的所有请求重定向到我在地址 127.0.0.1:4003 的服务器,附加 /api/v1 和原始请求中传递的整个路径。

例如,对 https://www.example.com/en/rss/blog 的请求将转到 http://127.0.0.1/api/v1/en/rss/blog

我尝试使用 location,将 url 与正则表达式匹配:

location ~ ^.*\b(\/rss\/)\b.*$ {
  rewrite ^.*\b(\/rss\/)\b.*$ /api/v1 break;
  proxy_pass http://127.0.0.1:3007;
}

重定向有效,但没有附加路径,因为我收到 Cannot GET /api/v1/rss/ 作为响应。

我想这是正则表达式的问题,它应该捕获整个路径而不是只捕获 /rss/;但是如何呢?

欢迎提出任何想法!

单词边界结构依赖于上下文,在 \b\/rss\/\b 的情况下,模式将仅在 / 是 preceded/followed 时匹配单词字符,即字母、数字或 _.

在您的情况下,正则表达式应如下所示

location ~ .*(/rss/.*)
location ~ (/rss/.*)

  • .* - 匹配除换行字符以外的任何文本
  • (/rss/.*) - 第 1 组 (</code>):<code>/rss 字符串,然后是除换行符之外的任何文本