xeo*_*000 10 apache reverse-proxy url-rewriting response-headers
我有一个主代理,它将请求发送到安装了OpeenSSO的辅助代理.
如果OpenSSO代理确定用户未登录,则会将302重定向引发到身份验证服务器,并提供用户在重定向位置标头中请求的原始(编码)URL作为GET参数.
但是,GET变量中的URL是内部(辅助)代理服务器的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"
Run Code Online (Sandbox Code Playgroud)
Bri*_*anV 17
ProxyPassReverse应该为您执行此操作:
该指令允许Apache调整HTTP重定向响应的位置,内容位置和URI头中的URL.
我不确定为什么你的反向代理已经没有这样做了,假设你正在使用一对ProxyPass和ProxyPassReverse指令来定义它.
如果您希望能够如您所描述的那样编辑Location标头,则可以从Apache 2.4.7开始编辑它:
对于编辑,有一个值参数,它是一个正则表达式,另一个是替换字符串.从版本2.4.7开始,替换字符串也可能包含格式说明符.
文档中提到的"格式说明符"包括能够使用环境变量,例如%{VAR}e.
您可能还需要考虑修改应用程序,使orig_request URL参数相对化,从而可能无需使用环境变量进行Header编辑.
您还可以尝试在Location标头中使用相对路径,这样就无需将一个域明确映射到另一个域.从RFC 7231(2014年6月)开始,这是正式有效的,但在此之前得到了广泛的支持.您可以使用Apache Header edit指令(甚至在版本2.4.7之前,因为它不需要环境变量替换)来重新激活您的Location标头.这看起来像这样:
Header edit Location "(^http[s]?://)([a-zA-Z0-9\.\-]+)(:\d+)?/" "/"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25034 次 |
| 最近记录: |