Apache-2.2
將裸域重定向到 SSL
我有一個萬用字元 SSL 證書,我想將所有 http 請求重定向到其等效的 https。
我的伺服器是 Debian (wheezy),我正在執行 Apache 2.2.22
我在 /etc/apache2/apache2.conf 的末尾添加了以下內容
<VirtualHost *:80> ServerName domain.tld ServerAlias *.domain.tld Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains" RewriteEngine On RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L] </VirtualHost> <VirtualHost *:443> ServerName domain.tld ServerAlias *.domain.tld Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains" SSLEngine on SSLCertificateFile /path/file.crt SSLCertificateKeyFile /path/file.key SSLCertificateChainFile /path/file.crt SSLCACertificateFile /path/file.pem </VirtualHost>
這適用於子域,但不適用於裸域(http://www.domain.tld轉到 https 但http://domain.tld沒有)
我錯過了什麼?
如果它只針對一個域,那麼您可以在 .htaccess 中進行
RewriteEngine on RewriteCond %{HTTPS} !^on$ RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
以下內容對於保護從 http 重定向到 https 的會話也很有用
<IfModule mod_headers.c> Header set Strict-Transport-Security "max-age=16070400; includeSubDomains" </IfModule>
正如您為您的虛擬主機定義了一個包羅萬象的規則,我能看到的唯一原因是,裸域由其他一些虛擬主機提供服務。但是,如果是這種情況,您應該在 apache 重新啟動時收到適當的警告。
此外,我想知道 Strict-Transport-Security 在應用於埠 80 上的虛擬主機時會做什麼。此標頭應僅適用於 https。
要檢查是否使用了重寫規則以及它們在做什麼,只需添加用於 Rewritelogging 的指令,例如: RewriteLogLevel 256 RewriteLog “/tmp/rewrite.log”
該日誌非常冗長,因此請務必在分析(並可能發布)日誌輸出之後刪除這些行。