快速提问。我们有两个应用程序。端口3001
和3002
。我们的域名是www.domain.com
。
一旦有人进入www.domain.com/pathname
,我们想要拥有的东西我们希望他们被重定向到另一个应用程序的特定路径。
怎么做?
我们已经在我的nginx中解决了这个问题
location /pathname/ {
proxy_pass http://127.0.0.1:3002/;
}
几乎可以正常工作。但是,我们在3002
下的应用程序可以在路径/#/pathname
上运行。
我们可以通过输入www.domain.com/pathname/#/pathname
来访问它。我们想通过输入www.domain.com/pathname
访问相同的链接。
如何缩短?我想念什么?
答案 0 :(得分:1)
/pathname
重定向到/pathname/#/pathname
根据您的评论,您只想从/pathname
重定向到/pathname/#/pathname
尝试这些组合的指令:
rewrite
附加#
和fragment identifier
proxy_pass
来反向代理到应用程序。例如:
location /short_path_name/ {
rewrite ^ /pathname/#/$uri permanent;
break;
}
location /pathname/ {
proxy_pass http://127.0.0.1:3002/;
}
并为您的应用使用www.domain.com/short_path_name/
链接。
fragment identifier
不幸的是,你不能。因为服务器从不从浏览器获得 fragment identifier 。
片段标识符的功能与URI的其余部分不同:它的处理完全是在客户端进行的,没有Web服务器的参与
命名有点可笑,但是历史悠久。参见TBL (1997): Fragment Identifiers on URIs:
URI参考是通过为信息对象获取URI,添加“#”符号和碎片标识符而构建的。 (最后一个术语是历史性的,因此不要细化它必然会标识一个片段。)
有一些解决方法,例如将标签符号编码为%23
,但我不确定这是您的方式。
注意:重写网址,如果您在?
指令的末尾添加rewrite
,nginx可以保留请求参数。
请参见Nginx rewrite手册:
如果替换字符串包括新的请求参数,则先前的请求参数将附加在它们之后。如果不希望这样,请在替换字符串的末尾添加问号,避免附加它们,例如:
rewrite ^/users/(.*)$ /show?user=$1? last;