我正在購物車網站上工作,我想在用戶輸入帳單詳細信息時將用戶重定向到HTTPS頁面,並在下一頁保持HTTPS連接,直到他註銷。使用PHP從HTTP重定向到HTTPS
爲了做到這一點,我需要在服務器上安裝什麼(我使用的是Apache),以及如何從PHP完成此重定向?
我正在購物車網站上工作,我想在用戶輸入帳單詳細信息時將用戶重定向到HTTPS頁面,並在下一頁保持HTTPS連接,直到他註銷。使用PHP從HTTP重定向到HTTPS
爲了做到這一點,我需要在服務器上安裝什麼(我使用的是Apache),以及如何從PHP完成此重定向?
嘗試是這樣的(應爲Apache和IIS工作):
if(empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == "off"){
$redirect = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $redirect);
exit();
}
您可以隨時使用
header('Location: https://www.domain.com/cart_save/');
重定向到URL保存。
但我會建議通過.htaccess和Apache重寫規則來做到這一點。
我遇到了麻煩重定向到HTTPS,以在Windows工作服務器 運行版本6的MS Internet信息服務(IIS)。我更多 用於在Linux主機上使用Apache,所以我轉向互聯網尋求 幫助,這是當我搜索 爲「php redirect http to https」時排名最高的堆棧溢出問題。但是,所選答案對我來說不起作用 。
一些試驗和錯誤之後,我發現,與IIS,$_SERVER['HTTPS']
是 設置爲off
非TLS連接。我認爲下面的代碼 可以幫助任何其他通過搜索引擎來到這個問題的IIS用戶。
<?php
if (! isset($_SERVER['HTTPS']) or $_SERVER['HTTPS'] == 'off') {
$redirect_url = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header("Location: $redirect_url");
exit();
}
?>
編輯:從另一個Stack Overflow answer, 一個簡單的解決方法是檢查if($_SERVER["HTTPS"] != "on")
。
好吧......但是op說他正在使用apache – 2016-03-22 23:02:54
@JakeSylvestre夠了。鑑於這個問題沒有被標記爲'apache',我發佈了這個答案,以便其他IIS用戶(類似於我所處的情況)可能會通過搜索引擎遇到此頁面。我贊同這樣的觀點,即答案是爲了整個社區的利益,而不僅僅是OP。 – 2016-03-22 23:36:58
這是一個很好的辦法做到這一點:
<?php
if (!(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' ||
$_SERVER['HTTPS'] == 1) ||
isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
$_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'))
{
$redirect = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $redirect);
exit();
}
?>
效果不錯,標記爲良好的那個會在Chrome中至少返回一次重定向 – 2017-08-30 20:55:07
它不總是工作。我嘗試過使用它,並且$ _SERVER數組中沒有'https'元素,因此它給出了'太多重定向'的錯誤。將需要使用其他方法。 – 2012-04-09 16:14:40
我在幾分鐘內編輯了這個問題,也許這會對你有用 – 2012-04-14 22:24:53
我不得不測試'if($ _SERVER ['HTTPS'] ==「off」)'讓這段代碼正常工作。我認爲這是因爲我在IIS上,而不是像OP那樣的Apache。 – 2013-04-26 19:43:29