[英]PHP redirect to HTTPS if page is
我需要一條PHP if / else語句,如果sign-in.php或register.php頁面是通過HTTP訪問的,我想重定向到HTTPS否則,如果通過HTTPS訪問任何其他頁面,則重定向到HTTP加上任何查詢字符串例如,如果用戶嘗試訪問受限頁面( http://domain.com/my-account.php ),則該網站會將用戶重定向到http://domain.com/sign-in.php?redirect=my-占然而,我想在頁面重定向到https://domain.com/sign-in.php?redirect=my-account 。
我知道我可以簡單地將標頭重定向更改為包括https而不是http,但是用戶可以鍵入http://domain.com/sign-in.php?redirect=my-account,因此只需確保這種情況登錄即可(或其他)通過https進行。
任何幫助表示贊賞
干得好。
//force the page to use ssl
if ($_SERVER["SERVER_PORT"] != 443) {
$redir = "Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
header($redir);
exit();
}
$ _SERVER ,它是一個包含諸如標題,路徑和腳本位置之類的信息的數組。
您可以檢查$ _SERVER,特別是“ SERVER_PROTOCOL”
您的代碼中應該有一部分始終在每個頁面上運行。 在MVC中,它將在您的基本控制器中。 其他設計可能在每個頁面上都包含一個init.php文件。
此文件中包含需要HTTPS的頁面白名單。
$requires_https = array(
'sign-in.php' => TRUE,
'register.php' => TRUE
);
然后,您需要確定請求的頁面。
$url_info = pathinfo($_SERVER['REQUEST_URI']);
$page = $url_info['filename'];
下一步檢查您使用的是HTTP還是HTTPS
$is_secure = ! empty($_SERVER['HTTPS']);
最后,您可以進行檢查:
if (isset($requires_https[$page]) AND ! $is_secure)
header('Location: https://www.yoursite.com/' . $page);
elseif ( ! isset($requires_https[$page]) AND $is_secure)
header('Location: http://www.yoursite.com/' . $page);
通過使用自定義重定向功能和site_url函數,可以肯定地在最后一部分上對此進行了改進,該函數接受是否為安全選項並構建正確的URL。
值得一提的是,是否有人在HTTPS中瀏覽通常並不重要。 實際上,Google的大多數服務都使用HTTPS,並且具有更好的Internet連接,最終將全部使用HTTPS進行沖浪。 重要的是要確保應該安全的頁面是安全的,而不是確保不需要安全的頁面不是安全的。
if ($_SERVER['SERVER_PORT'] != 443) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
exit();
}
使用init類/腳本的一部分-您可以運行代碼來檢查該頁面是否需要先使用SSL,但這是強制重定向到SSL的實際代碼(REQUEST_URI提供了所有目錄等,以獲取正確的路徑)。 。
在單個頁面上使用(即登錄和注冊)-這會將用戶重定向到使用SSL的此頁面(將此代碼放在頂部附近)。
永久移動301也可以防止產生負面的SEO。
(更多)完整的方法:(包括查詢字符串)
要確定是否在https上:
$secure = (!empty(filter_input(INPUT_SERVER, 'HTTPS')) &&
filter_input(INPUT_SERVER, 'HTTPS') !== 'off') ||
filter_input(INPUT_SERVER, 'SERVER_PORT') == 443;
根據https://stackoverflow.com/a/2886224
然后重定向並包含查詢字符串:
if($secure){
header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
}
使用REQUEST_URI
代替PHP_SELF
將包含查詢參數(URL中?
后面的內容)。
和往常一樣,使用filter_input()
之類的來過濾用戶輸入(包括這些輸入filter_input()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.