重写Apache中响应头的分页链接

重写Apache中响应头的分页链接

我有一个 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.comwww.example.comlocalhost: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/"

相关内容