我们无法解决的非常简单的问题。以下代码未正确重定向:
$location = str_replace("http","https",$this->page->current_url);
header( "Location: ".$location );
我收到400错误:“您的浏览器发送了此服务器无法理解的请求。 原因:您正在向支持SSL的服务器端口说明HTTP。请使用HTTPS方案访问此URL。“
如何将PHP从通过HTTPS提供的页面重定向到通过HTTP提供的页面(例如安全登录,然后重定向到非安全应用程序页面?)
答案 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,它工作正常。