2013-02-07 23 views

回答

5

$_SERVER['HTTPS']如果使用HTTPS則非空。但是,您最好在Web服務器級別執行HTTPS強制實施,例如,

<virtualhost example.com:80> 
    redirect permanent https://example.com 
</virtualhost> 

<virtualhost example.com:443> 
    blah blah blah 
</virtualhost> 
+1

如果足夠重要,我只需在https上設置apache來提供內容,而不是在http上。 – moodboom

+0

,但您仍然需要在非https鏈接上重定向,因爲太多人在輸入https時會錯過https中的's'。 –

+0

好的,如果它是着陸頁。在那種情況下,我會在那裏放置一個非安全版本的頁面(使用登錄按鈕或任何重定向到https的)。這只是我,在我可憐的小家庭服務器上有十幾個虛擬主機,每個HTTPS必須使用不同的端口。普通用戶永遠不會輸入端口部分的權利。 :-)不過,你的建議很好,也很簡潔。 – moodboom

2

在.htaccess文件,添加以下:

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{HTTPS} !=on 
    RewriteRule ^/?(.*) https://YOUR_URL/$1 [R,L] 
</IfModule> 
2

另外,考慮添加HSTS HTTP標頭。這告訴瀏覽器甚至不嘗試訪問HTTP版本,並直接轉到HTTPS。這可以防止可能的中間人攻擊,您的重定向可能會被攔截。

(前提是用戶已經瀏覽過這個網站,或者你的網站添加到內置HSTS列表。)

http://dev.chromium.org/sts爲如何被添加到內置的名單,以及頭的外觀的例子喜歡。

2

唯一正確的答案是因爲您配置服務器的行爲方式。

如果您不知道,絕對有信心,在向PHP發送請求時,無論它是通過HTTP還是HTTPS發送,那麼您的系統都不安全。

相關問題