我需要设置反向代理,将原始请求的标头值作为参数放入目标 URL。这样做的原因纯粹是应用程序特定的,不幸的是我无法更改此应用程序。例如,我需要以下内容https://a.com我需要使用 http 标头 myparam=abcd 代理http://b.com/?val=abcd
是否可以配置 IIS 或 Apache 来执行此类任务?如果可以,您能解释一下如何操作吗?
答案1
在 Apache 2.4 中测试:
# (In a VirtualHost for a.com)
RewriteEngine on
RewriteRule ^(.*)$ http://b.com$1?val=%{HTTP:myparam} [QSA,P]
重写示例(如果标题myparam
有值myvalue
):
a.com
变成http://b.com?val=myvalue
a.com/path/here
变成http://b.com/path/here?val=myvalue
a.com/path?a=b&c=d
变成http://b.com/path?a=b&c=d&val=myvalue
如果myparam
标头不存在,a.com/x
将重定向到http://b.com/x?val=
。如果要重定向到http://b.com/x
,可以使用上述代码的以下较长版本:
RewriteEngine on
RewriteCond %{HTTP:myparam} .
RewriteRule ^(.*)$ http://example.com$1?val=%{HTTP:myparam} [QSA,L,P]
RewriteRule ^(.*)$ http://example.com$1 [P]
相关链接:
答案2
对于 IIS,您可以使用URL 重写扩展:
IIS URL Rewrite 2.0 使 Web 管理员能够创建强大的规则来实现更易于用户记住和搜索引擎查找的 URL。通过使用规则模板、重写映射、.NET 提供程序和集成到 IIS 管理器中的其他功能,Web 管理员可以轻松设置规则,以根据 HTTP 标头、HTTP 响应或请求标头、IIS 服务器变量甚至复杂的编程规则定义 URL 重写行为。此外,Web 管理员还可以根据重写规则中表达的逻辑执行重定向、发送自定义响应或停止 HTTP 请求。
适用于:IIS 7、IIS 7.5、IIS 8
可以在以下位置找到演练: 为 URL 重写模块创建重写规则。