我有一个主代理,它将请求发送到安装了 OpenSSO 的辅助代理。
如果 OpenSSO 代理确定用户未登录,它会引发 302 重定向到身份验证服务器,并在重定向位置标头中提供用户请求的原始(编码)URL 作为 GET 参数。
但是,GET 变量中的 URL 是内部(辅助)代理服务器的 URL,而不是原始代理服务器的 URL。因此,我想编辑/重写“位置”响应标头以提供正确的 URL。
例如
- http://a.com/hello/(原始请求的 URL)
- http://a.com/hello2/(带有 OpenSSO 代理的二级代理)
- http://auth.a.com/login/?orig_request=http%3A%2F%2Fa.com%2Fhello2%2F(302重定向到身份验证服务器,请求的第二个代理服务器的 URL 编码在 GET 变量中)
- http://auth.a.com/login/?orig_request=http%3A%2F%2Fa.com%2Fhello%2F(编码的 URL 被重写为原始请求的 URL)
我已经尝试了几乎所有标题和重写的组合,但没有运气,所以我认为这可能是不可能的。我得到的最接近的是这个,但是 mod_headers 编辑函数不解析环境变量。
# On the primary proxy.
RewriteEngine On
RewriteRule ^/(.*)$ - [E=orig_request:$1,P]
Header edit Location ^(http://auth\.a\.com/login/\?orig_request=).*$ "$1http%3A%2F%2Fa.com%2F%{orig_request}e"