首页 > 解决方案 > 包含“#”的 Google 负载均衡器映射 url

问题描述

我有一个使用 GCP 负载平衡器和 GCP 存储作为后端服务配置的网站。

现在是什么:

https://example.com/#/  --> works
https://example.com/#/path --> works

我想要的是:

https://example.com/#/ 但在后端它应该点击/#/path。

我尝试过使用 GCP 路径映射,host and path rules但符号#导致问题。它在浏览器中转换#%23并说key not found

任何的想法?

标签: google-cloud-platformgoogle-cloud-storagegoogle-cloud-load-balancer

解决方案


在 URL/URI 中,符号哈希 (#) 具有特殊含义,它是用作通用分隔符1的保留字符,就像正斜杠 (/) 或 at (@) 一样。实际上,井号被解释为 URL 中的锚点,因此它应该指向文档中的锚定部分。一个例子是:

http://example.com/your_page.html#my_document

它会将 URL 直接链接my_documentyour_page.html.

因此,如果您使用与此不同的散列字符,则出于安全原因将对 URL 映射进行编码。如 RFC1738 2中所述:字符“#”是不安全的,应始终进行编码,因为它在万维网和其他系统中用于将 URL 与可能跟随它的片段/锚标识符分隔开。

因此,您的 URL 字符串正在由浏览器机制进行编码。更多信息在这里3

尽管可以使用井号设置 URL 映射,但不建议这样做。因此,我鼓励您不要在 URL 映射中使用井号。

正如您提到的那样,它起作用的原因仅仅是因为哈希符号“#”在未编码时已被您的 Web 应用程序忽略。所以它可以像 for /#/pathor一样工作/#/#/#/path。但实际上它只是在解释/path.


推荐阅读