來自 ssl 子域的 Apache 重定向不起作用
我正在嘗試將所有流量重定向到 https 並將所有子域重定向到主域並且無法正確處理。我正在使用帶有最新 apache2 的 Ubuntu 14.04。
我為埠 80 設置了虛擬主機,以將所有流量重定向到 https:
<VirtualHost *:80> ServerName example.com Redirect permanent / https://example.com/ </VirtualHost>
並設置 ssl virtualhost 將所有子域重定向到主域:
<IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin admin@example.com ServerName example.com ServerAlias *.example.com DocumentRoot /var/www/example.com/public_html/ ErrorLog /var/www/example.com/logs/error.log CustomLog /var/www/example.com/logs/access.log combined Include /etc/letsencrypt/options-ssl-apache.conf Include /etc/letsencrypt/options-ssl-apache.conf Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/example.com-0001/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com-0001/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateChainFile /etc/letsencrypt/live/example.com-0001/chain.pem Redirect permanent / https://example.com </VirtualHost> </IfModule>
結果如下:
工作http://example.com>到<https://example.com
工作http://anything.example.com>到<https://example.com
不工作https://anything.example.com>到<https://example.com
問題是:我如何將 ssl 子域重定向到主域?
請告訴我我做錯了什麼。
非常感謝。
鑑於Let’s Encrypt 似乎只會在 2018 年 1 月開始頒發萬用字元證書,並且您的伺服器設置較早,因此您似乎沒有使用萬用字元 SSL 證書。
為了連接
https
,甚至重定向或處理您的“別名”,您必須擁有客戶端發送的任何域的有效 SSL 證書。SSL 握手發生在處理 Apache 伺服器中的*任何內容之前。*換句話說,如果您沒有使用萬用字元 SSL 證書,則 SSL 握手將在 Apache 配置文件有機會處理別名
https://anything.example.com
之前失敗。無論其他問題可能是什麼,都必須在進行任何進一步診斷之前進行糾正,如果需要的話。例如,如果期望的行為是
https://anything.example.com
“重定向”給http://example.com
您可能必須使用mod_rewrite
條件匹配,因為該RedirectMatch
指令僅與 URL-path 匹配,並且使用ServerAlias
將創建必要的匹配來處理初始查詢,但不會嘗試將查詢“重寫”或“重定向”到另一個所需的 URL。