将HTTPS重定向到HTTP

时间:2011-05-06 11:57:04

标签: php

我们无法解决的非常简单的问题。以下代码未正确重定向:

$location = str_replace("http","https",$this->page->current_url);
header( "Location: ".$location );

我收到400错误:“您的浏览器发送了此服务器无法理解的请求。 原因:您正在向支持SSL的服务器端口说明HTTP。请使用HTTPS方案访问此URL。“

如何将PHP从通过HTTPS提供的页面重定向到通过HTTP提供的页面(例如安全登录,然后重定向到非安全应用程序页面?)

5 个答案:

答案 0 :(得分:2)

试试这个,对我来说工作正常

<?php
if  ( $_SERVER['HTTPS'] )
    {
            $host = $_SERVER['HTTP_HOST'];
            $request_uri = $_SERVER['REQUEST_URI'];
            $good_url = "http://" . $host . $request_uri;

            header( "HTTP/1.1 301 Moved Permanently" );
            header( "Location: $good_url" );
            exit;
    }
?> 

答案 1 :(得分:2)

这适用于http到https和https到http(使用一些调整来检查)

首先检查主机上的https是否为ON,然后使用PHP中的下述功能将URL重定向到https

function httpToHttps() 
{
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") 
    {


    $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];

    } 
    else 
    {

    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_UR

I"];
    }
    return $pageURL;
}

答案 2 :(得分:1)

    if( isset($_SERVER['HTTPS'] ) ) {
    header( "Location:foo.php");

答案 3 :(得分:0)

不确定这是否会导致此类问题,但您应在调用标头功能后添加退出。这可确保不执行以下代码,并且HTTPS请求本身不返回任何数据。应该在返回任何内容之前调用头函数。

$target = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header('Location: '.$target, true, 303);
exit;

答案 4 :(得分:0)

Duh - 我不知道为什么我不看$ location。它包含http // localhost:443 / [...]无效。我只是删除了:443,它工作正常。