2014-04-13 119 views
0

我已經搜索了很高的和很低的回答這個問題,所以任何幫助,非常感謝。將HTTP重定向到HTTPS。什麼是最好的方法?

我有一個Apache服務器,我試圖瞭解什麼具體的方法可用來接受HTTP請求,並轉發或重定向到HTTPS在同一臺服務器上。

我還需要知道爲什麼一種方法可能比另一種方法更好,爲什麼你會選擇另一種方法?這對我來說很重要。

感謝您的幫助

回答

0

使用Apache + PHP有幾種不同的方式:服務器配置或PHP代碼。在服務器配置中執行這種檢查的好處在於,它可以在任何地方應用,或者僅在每個目錄基礎上應用,而無需在該文件夾或網站上的每個頁面上更改PHP。服務器配置還提供更快的運行時間。

服務器配置

使用mod_rewrite,你可以在下面的行添加到您的虛擬主機配置文件:

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteCond %{SERVER_NAME} (.*) 
RewriteRule (.*) https://%1/$1 [R=301,L] 

顯然,mod_rewrite的必須在服務器上啓用這個工作。 Apache's mod_rewrite documentation有更多的細節。

PHP代碼

正如其他人提及的,PHP提供了可用於設置Location HTTP響應報頭,並且將客戶端重定向到HTTPS一個header功能。這不需要訪問服務器配置或mod_rewrite。

+0

這真的很有幫助。謝謝!我想知道是否可以爲我解決一些問題 - 您可以將該代碼添加到.htaccess文件,而不是httpd.conf(我認爲您的意思是通過vhost配置文件?)。我的直覺是避開.htaccess文件。你怎麼看?我對你的意見感興趣的另一件事是在這種情況下使用mod_alias和mod_rewrite之間的區別?同樣,我的直覺是去mod_rewrite,因爲它通常可以做更多,也許會更好的做法? – tipyn

+0

您可以將這種代碼放到.htaccess文件中,但語法有點不同(更像是mod_alias)。問題在於我不知道如何在mod_alias或.htaccess文件中執行HTTPS檢查,所以我肯定會爲此應用程序使用mod_rewrite。 – jkt123

+0

您可以在httpd中進行這些代碼更改。conf文件或在特定於虛擬主機的配置文件中(如果您在單個服務器上運行多個站點)。 – jkt123

-1

好吧,假設你使用PHP,我做的是:

header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], true, 301);

但也有很多其他的方式,完全取決於你的工作是什麼與當時。我相信有人會有我的更好的答案。

祝你好運!

+1

Thanks @Outsider!你爲什麼選擇這個通過服務器配置選項? – tipyn

+0

@Luca:就我而言,我爲我的學校在多個網站上工作,系統管理員已鎖定對服務器配置文件的寫入訪問權限。我不是100%,爲什麼他沒有做出改變,但這是一個不同的故事。 :) – Outsider

+0

這是有道理的!謝謝 – tipyn