具有位置和正则表达式的 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
字符串,然后是除换行符之外的任何文本
让我们留下来,我在 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
字符串,然后是除换行符之外的任何文本