2017-06-23 138 views
1

目标: 执行条件重定向/向前从站点1到基于所述请求(Site 1中)的特定报头(HTTP_SM_USER)值站点2,并确保所有的当前的自定义首部的数据是作为重定向/转发的一部分转发到Site2。重定向后,用户可以在浏览器窗口中看到URL更改。阿帕奇条件重定向规则不转发标头值

流量: 用户访问网站1 - >外部应用程序集,除了一些自定义页眉基于一定的标准为默认HTTP头 - >的Web服务器查找特定的头值,如果匹配所有的头重定向到站点2

Apache Web服务器配置:

<VirtualHost *.443> 
    ServerName site1.com 
    ServerAdmin [email protected] 
    UseCanonicalName on 
    DocumentRoot /var/www/html 

    # 
    # SSL Config comes here 
    # 

    ErrorLog /path/to/error/log 
    TransferLog /path/to/access/log 
    LogLevel warn 

    RewriteEngine On 
    RewriteCond %{HTTP:SM_USER} ^USER1$ [NC] 
    RewriteRule .* https://site2.com/$1 [R=301, L] 

    <Location /page1> 
    . 
    . 
    </Location> 

    . 
    . 
    . 

</VirtualHost> 

问题:发生条件重定向,但标题丢失。我应该怎么做才能确保HTTP头部也被转发?我试图看到Apache的mod_proxy,但不知道如何在这种情况下使用它。请专家帮忙。任何替代建议也欢迎。

+0

会添加[P]标志帮助吗?试想一下。我需要尝试一下,让线程知道它。 –

+0

@OlafDietsche - 有什么建议吗? –

+0

[P]标志没有帮助行为。标题还没有通过。 –

回答

0

您不能拥有重定向“转发”头,因为它取决于客户端发送重定向后发送给下一个服务器的内容。它可能会选择不遵循重定向!不太可能,只是为了明确情况。

如果您希望在浏览器中更改URL,则需要在应用程序端执行此操作。让您的应用程序处理指向下一个服务器,然后发出一个200响应,并附带一条指令来执行此操作。然后它可以像第一次请求那样发送自定义标题。

如果这是不可接受的,那么使用mod_proxy可以像你说的那样工作,但它不会改变浏览器中的URL,因为第一个服务器会将请求代理到第二个服务器,所以浏览器仍然会看到它作为第一个。

总之,你不能做你想做的事情,因为HTTP不会这样工作,所以你将不得不以某种方式妥协,或者不改变浏览器中的URL,或者更新应用程序来照顾它。

+0

感谢@SuperDuperApps进行响应。 不幸的是,最初设置标题的应用程序对我们来说是一个黑匣子,我们无法对其进行修改。我继续尝试使用mod_proxy来解决我的情况,但是头文件也没有得到转发。您能否在mod_proxy一侧提供一些额外的指针以确保头文件正确转发。 –

0

解决方案:

我终于得到了它的使用下面的标志和代理规则很多后故障排除(与mod_proxy的)工作。所有重写规则已被删除。

ProxyRequests Off 
ProxyPreserveHost On 
SSLProxyEngine On 

ProxyPass "/" "https://site2.com/" Keepalive=On 
ProxyPassReverse "/" "https://site2.com/" 

注:用户访问网站1 - >外部应用程序设置页眉和Apache立即向代理网站现在2头可在站点2。