Nginx丢弃号码后的数据(#)

我有现在的请求,看起来像
https://smth.ru/smth/GET_DATA?p_DATA_TYPE=arg1#arg2&arg2=XXX

我知道这是非常不正确的,但我必须与它合作。 它和Apache一起工作。

现在我需要nginx作为这个请求的代理。 但它简单地丢弃了“#”后面的所有内容,而且在$ query_string之类的variables中找不到它

这就是为什么后端服务器只接收
https://smth.ru/smth/GET_DATA?p_DATA_TYPE=type

如何获得#后的参数或使nginx代理完整的请求?

我的服务器块看起来像

server { ... location / { proxy_pass_header Authorization; proxy_pass_request_headers on; proxy_pass http://127.0.0.1:8080/$request_uri?$query_string; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; } ... } 

通过代理作为

  proxy_pass http://127.0.0.1:8080; 

也没有效果。

试用套餐nginx.x86_64 0:1.6.2-23.el6.art然后更新到nginx.x86_64 0:1.8.0-1.el6.ngx – 相同的效果…

UPD:似乎Apache使用整个请求,而nginx丢弃#后的所有内容。

你的问题是,浏览器甚至不会将片段标识符发送到服务器,所以即使Nginx愿意重写,它也不能这样做,因为它没有提供这个信息。

我真的好奇你以前的解决scheme如何与Apache工作 – 我只是加倍检查,我的Firefox不发送请求中的片段标识符(根据数据包捕获)。 也许无论你使用的浏览器有什么不同的performance。

一个潜在的解决scheme是通过URL编码来转义散列字符,这使得它成为%23 。 您可以使用一些Javascript在页面加载时自动进行修改(检查是否存在片段标识符,如果存在,则将其转换为%23并使用新的URL刷新页面)。 然后你需要重写,而不是原来的哈希字符。