知識庫

Apache 重定向到 HTTPS

當 SSL 證書安裝在伺服器上時,網站默認不通過安全的 HTTPS 連接可用。每次需要安全連接時,都必須在 URL 前添加 'http'。為了確保網站訪問者的最大安全,最好的方法是啟用從 HTTP 到 HTTPS 的自動重定向。

如果您在 Apache 上安裝了某些控制面板,則必須在面板本身中設置重定向,而不是在伺服器上,以避免重定向循環或模塊執行不正確。您可以在 cPanel 中查看如何設置 HTTPS 重定向的指南 在這裡

如果未使用 cPanel 或其他控制面板或 GUI(圖形用戶界面),則應使用 Apache 重定向。


在設置重定向之前,請確保以下模塊已啟用。

  • 要在基於 Debian(Ubuntu)的操作系統上啟用模塊,運行以下命令:

sudo a2enmod rewrite
sudo a2enmod ssl

  • 要在基於 RHEL 的操作系統(CentOS)上啟用 ssl 模塊,運行:

yum install mod_ssl

在這些操作系統上,重寫模塊通常默認啟用。主配置文件中應存在以下行:

LoadModule rewrite_module modules/mod_rewrite.so

確保它沒有被註釋掉。如果主配置文件中沒有此行,請運行以下命令安裝該模塊:

sudo yum install mod_rewrite


如果兩個模塊都已啟用,您將看到以下消息:

Apacheredirect

啟用 Apache 重定向

啟用 http 到 https 的 Apache 重定向有幾種方法:

  1. 在必要的域的虛擬主機文件中啟用重定向。
  2. 在 .htaccess 文件中啟用它(先前在網站根文件夾中創建)。
  3. 在虛擬主機文件中使用 mod_rewrite 規則。
  4. 在 .htaccess 文件中使用它來強制 HTTPS。

在虛擬主機中啟用 Apache 重定向

在虛擬主機文件中啟用重定向比其他選項更安全和簡單,因為配置對所有系統都是相似的。通常,安裝 SSL 證書後,Apache 上會有兩個虛擬主機文件:一個是非安全端口 80,另一個是安全端口 443。可以在端口 80 的虛擬主機中啟用重定向到 HTTPS。如果您想僅對某些網頁強制 HTTPS,可以使用以下指令集:

< VirtualHost *:80 >
ServerName www.yourdomain.com
DocumentRoot /usr/local/apache2/htdocs
Redirect permanent /secure https://yourdomain.com/secure
< /VirtualHost >

< VirtualHost _default_:443 >
ServerName www.yourdomain.com
DocumentRoot /usr/local/apache2/htdocs
SSLEngine On
...
< /VirtualHost >

其中 /secure 是您希望 Apache 強制使用 HTTPS 的目錄。

否則,可以為網站的所有頁面啟用永久重定向到 HTTPS:

< VirtualHost *:80 >
ServerName www.yourdomain.com
Redirect permanent / https://www.yourdomain.com/
< /VirtualHost >

< VirtualHost _default_:443 >
ServerName www.yourdomain.com
DocumentRoot /usr/local/apache2/htdocs
SSLEngine On
...
< /VirtualHost >

使用 .htaccess 重定向到 HTTPS

作為替代方案,您可以修改 .htaccess 文件。可在放置網站文檔根文件夾的 .htaccess 文件中使用以下指令來保護網站的某些頁面:

Redirect permanent /secure https://www.yourdomain.com/secure

使用 Apache Rewritecond - mod_rewrite 規則

建議有經驗的用戶使用 mod_rewrite 規則,因為在不同系統上的確切配置可能會有所不同。mod_rewrite 規則的語法可能比較複雜——例如,如果您想將某些子文件夾重定向到 HTTPS,而這些子文件夾中還包含其他子文件夾。如果您不確定是否可以使用 mod_rewrite,最好在虛擬主機文件中啟用 HTTPS 的重定向。如果您想為某些頁面創建重定向,mod_rewrite 規則應如下所示:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?secure/(.*) https://%{SERVER_NAME}/secure/$1 [R,L]

針對所有目錄的重定向相似,格式如下:

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

注意:要設置帶有 301 狀態碼(永久性) 的重定向,您需要將該代碼分配給 R 標誌中的括號,添加 "=301"。

現在您的網站將默認可通過 HTTPS 訪問。要檢查重定向是否正確工作,請清除您通常使用的瀏覽器的緩存,然後打開您的網站或嘗試在另一個瀏覽器中檢查。

我們想強調的是,上述命令僅與基於 Debian 的 Linux 派生版(如 Ubuntu)相關。如有任何具體問題以及其他類型操作系統的問題,我們強烈建議聯繫您的伺服器/主機提供商或參考官方伺服器文檔。