PHP/Apache调用;标题:位置“;压倒一切的方案?

PHP/Apache调用;标题:位置“;压倒一切的方案?,php,apache,http-headers,haproxy,Php,Apache,Http Headers,Haproxy,在过去的几个小时里,这让我发疯。看起来PHP/Apache/Pound/Haproxy(真的不知道)坚持将页面重定向到我以前使用过的同一个scheme/domain,尽管我明确指出它应该是另一个 背景:我们通常有一个http:\\www.example.com域连接到一个https:\\secure.example.com安全域(注意不同的子域)。这使我们的开发变得容易,因为我们没有针对所有开发人员/项目的SSL证书,我们只需检查URL是否以“secure”开头。对于这个项目,客户端希望http

在过去的几个小时里,这让我发疯。看起来PHP/Apache/Pound/Haproxy(真的不知道)坚持将页面重定向到我以前使用过的同一个scheme/domain,尽管我明确指出它应该是另一个

背景:我们通常有一个http:\\www.example.com域连接到一个https:\\secure.example.com安全域(注意不同的子域)。这使我们的开发变得容易,因为我们没有针对所有开发人员/项目的SSL证书,我们只需检查URL是否以“secure”开头。对于这个项目,客户端希望https:\\www.example.com作为一个安全域,所以我想:没问题,我只需要更改逻辑,以便在生产中检测它。那部分很好用

但是,在某些情况下,需要将用户从安全重定向到非安全,例如,当用户登录并被重定向到主页时。我已经将其缩小到这个简单的测试用例(注意:安全和非安全的公共目录只是彼此的符号链接):


找到了它;Pound默认将任何位置头重写为“最初请求的内容”,前提是域名匹配(在本例中是这样做的)。请参见ListenHTTPS部分中的“重写位置0 | 1 | 2”;在我的情况下,应该设置为0(“不要这样做”)。

找到它;Pound默认将任何位置头重写为“最初请求的内容”,前提是域名匹配(在本例中是这样做的)。请参见ListenHTTPS部分中的“重写位置0 | 1 | 2”;在我的例子中,应该设置为0(“不要这样做”)。

这表明重定向在服务器级别被更改,因此问题很可能与PHP和/或Apache和/或我们的设置有关。客户端只接收https>>https重定向,尽管我特别声明它应该是https>>http。很抱歉,应该在OP中更清楚地说明这一点。好吧,这表明重定向在服务器级别被更改,因此问题很可能与PHP和/或Apache和/或我们的设置有关。客户端只接收https>>https重定向,尽管我特别声明它应该是https>>http。对不起,我应该在行动中说得更清楚。
<?php

// this is our server-specific way of detecting secure/non-secure in production
if (isset($_SERVER['HTTP_X_SSL_CIPHER'])) {
        header("HTTP/1.1 Moved permanently", true, 301);
        header("Location: http://www.example.com/test.php");
}
echo 'bubbles!';