我想重写和代理所有网址,例如......
http://foo.com/app/groupA/index.html
http://foo.com/app/groupB/index.html
到
http://foo.com:8080/index.html
请注意groupA和groupB网址如何重写到同一个地方。
我尝试了很多东西,我觉得这很有可能是有效的,因为它匹配了/
第三次出现后的所有内容。
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
我需要弄清楚如何摆脱/ groupA /和/ groupB /部分URL。注意,我实际上并不知道该组所在的斜杠之间会有什么字符串。对于我所知道的一切,它可能是/ funnybunny:P。
答案 0 :(得分:1)
如果正则表达式包含大括号字符{}
,则表达式应该用引号括起来。
尝试:
rewrite "(?:.*?\/){3}(.*)" /$1 break;