要在 Apache 伺服器上自動將 HTTP 請求重定向到 HTTPS,你可以透過修改虛擬主機的配置來實現這一點。以下是詳細的步驟和配置示範:
步驟 1:啟用必要的模組
首先,確保啟用以下必要的 Apache 模組:
mod_rewrite
:用於重寫規則。mod_ssl
:用於處理 HTTPS 連接。
你可以使用以下指令來啟用這些模組(以 Ubuntu 為例):
sudo a2enmod rewrite
sudo a2enmod ssl
步驟 2:編輯虛擬主機配置
接下來,編輯你的 HTTP 虛擬主機配置檔案(例如:000-default.conf
),將 HTTP 請求重定向到 HTTPS。通常這些配置檔案位於 /etc/apache2/sites-available/
目錄下。
配置範例:
- HTTP 虛擬主機配置:將所有 HTTP 請求重定向到 HTTPS。 編輯你的 HTTP 虛擬主機配置檔案(例如:
000-default.conf
),並添加以下內容:
<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
# 將所有請求重定向到 HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>
HTTPS 虛擬主機配置:確認 HTTPS 虛擬主機配置正確。 編輯你的 HTTPS 虛擬主機配置檔案(例如:default-ssl.conf
),或建立一個新的 HTTPS 虛擬主機,內容如下:
<VirtualHost *:443>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/certs/yourdomain.com.crt
SSLCertificateKeyFile /etc/ssl/private/yourdomain.com.key
# 如果使用中間證書,確保包含該檔案
# SSLCertificateChainFile /etc/ssl/certs/intermediate.pem
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
步驟 3:啟用站點並重啟 Apache
如果新增或修改了配置檔案,請啟用站點並重新啟動 Apache 服務:
sudo a2ensite default-ssl.conf
sudo systemctl restart apache2
重要注意事項
- 301 重定向:使用
RewriteRule
時,[L,R=301]
表示永久重定向。測試配置時可以使用R=302
(臨時重定向),確認無誤後再改成R=301
。 - SSL 證書:確保你的 SSL 證書和密鑰配置正確。可以使用 Let’s Encrypt 免費取得證書,也可以使用商業 SSL 證書。
- 防火牆規則:確認伺服器防火牆允許 HTTPS 流量(端口 443)。
這樣配置後,Apache 就會自動將所有 HTTP 請求重定向到 HTTPS,確保網站安全性。