我有一个 apache conf,其用途ProxyPass
如下ProxyPassReverse
:
ProxyPass /api/v1/ http://navigator:5000/
ProxyPassReverse /api/v1/ http://navigator:5000/
navigator
正确使用该字段的服务的响应标头Location
将被重写为:
http://navigator:5000/foo/bar
变成
http://localhost/api/v1/foo/bar
但ProxyPassReverse
不支持重写Link
响应头的字段,我用它来分页(很像例如https://developer.github.com/v3/#pagination)。
因此,当导航器使用设置为以下内容的标头进行响应时Link
:
<http://navigator:5000/foo/bar?fromid=5cebb4724662a700099a9e56>; rel="next"
它不会被重写成预期的:
<http://localhost/api/v1/foo/bar?fromid=5cebb4724662a700099a9e56>; rel="next"
我还没有找到其他可以完成这项工作的 apache 模块,尽管我不是服务器配置方面的专家。我知道有办法重写响应主体中的 html/xml 链接,但由于这是在标头中,看起来不像 html 链接,所以该解决方案似乎不适用。
我怎样才能重写这些链接?
编辑
根据建议的答案,我有以下配置,几乎可以满足我的要求:
Header edit Link "http://navigator:5000/" "/api/v1/"
该配置用于多个主机(例如staging.example.com
,www.example.com
和localhost:5000
),因此我不能使用硬编码字符串。
我可能会将未指定主机的链接保留为相对链接,但如果编辑可以插入请求中使用的主机,我会很高兴。
我尝试将重写部分设为"%{HTTP_HOST}/api/v1/"
、和"%{HTTP_HOST}e/api/v1/"
,但它们都没有给出想要的结果。"{%HTTP_HOST}s/api/v1/"
"$HTTP_HOST/api/v1/"
答案1
您可以使用“标题”指示并编辑特定标题。
该指令如下所示:
Header edit Link expr="/foo/bar" /api/v1/foo/bar
您需要更换,也localhost
可以添加一个指令
Header edit Link expr="localhost" your_host_name
要使用主机名,您可以使用变量HTTP_HOST
Header edit Link "http://navigator:5000/" "${HTTP_HOST}/rest_api/v1/"