1

我想重写和代理所有 URL,例如 ...

http://foo.com/app/groupA/index.html
http://foo.com/app/groupB/index.html

http://foo.com:8080/index.html

请注意 groupA 和 groupB URL 是如何重写到同一个位置的。

我尝试了很多事情,我认为这很可能会起作用,因为它匹配第三次出现 a 之后的所有内容/

location /app {
  rewrite (?:.*?\/){3}(.*) /$1 break;
  index index.html index.htm;
  proxy_pass http://localhost:8080;
  proxy_redirect    off;
  proxy_set_header  Host $host;  
  proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header  X-Forwarded-Ssl on;
  proxy_buffering  off; # buffering would break CouchDB's _changes feed
  proxy_read_timeout 600s;
  proxy_send_timeout 600s;
  proxy_connect_timeout 75s;
}

然而,在端口 8080 上,我没有看到其他请求进入。注意,我在写的时候确实看到了请求......

  location ^~ /app {
    rewrite /app/(.*) /$1 break;
    index index.html index.htm;
    proxy_pass http://localhost:8080;
    proxy_redirect    off;
    proxy_set_header  Host $host;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Ssl on;
    proxy_buffering  off; # buffering would break CouchDB's _changes feed
    proxy_read_timeout 600s;
    proxy_send_timeout 600s;
    proxy_connect_timeout 75s;
  }

请求来自端口 8080,因为...

 /groupA/index.html
 /groupB/index.html

我需要弄清楚如何摆脱 URL 的 /groupA/ 和 /groupB/ 部分。请注意,我实际上不知道组所在的斜线之间的字符串是什么。据我所知,它可能是 /funnybunny/ :P。

4

1 回答 1

1

如果正则表达式包含大括号字符{},则表达式应括在引号中。

尝试:

rewrite "(?:.*?\/){3}(.*)" /$1 break;
于 2016-02-04T20:13:05.570 回答