Nginx使用"#"符号转发到不同应用程序的不同路径



快速问题。我们有两个应用程序。端口30013002。我们的域名是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.

如何缩短它?我错过了什么?

(upd( 只需将/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/链接。

不幸的是,nginx看不到fragment identifier

不幸的是,你不能。因为服务器永远不会从浏览器获取片段标识符

片段标识符的功能与 URI 的其余部分不同:它的处理完全是客户端的,没有 Web 服务器的参与

命名有点有趣,但它的历史悠久。参见TBL (1997(:URI上的片段标识符:

URI

引用是通过获取信息对象的 URI、添加"#"符号,然后添加Fragement 标识符来构建的东西。(最后一个术语是历史的,所以尽量不要将其稀释,不一定是标识片段(。

解决方法

有一些解决方法,例如将主题标签符号编码为%23但我不确定这是你的方式。

使用 nginx 处理请求参数

注意:重写 url,如果在指令末尾添加?,nginx 可以保留请求参数rewrite

参见 Nginx 重写手册:

如果替换字符串包含新的请求参数,则以前的请求参数将追加到它们之后。如果不希望这样做,在替换字符串的末尾放置问号可以避免追加它们,例如:

rewrite ^/users/(.*)$ /show?user=$1? last;

相关内容

  • 没有找到相关文章

最新更新