最近工作上遇到的經驗是~
在公司自家的虛擬機(windows伺服器)上同時要架設2個網站,但一個網站是有SSL憑證(走443 port),一個是沒有SSL憑證(走80 port)
(不要問我為什麼一個沒有SSL憑證 XD)
一開始照著網路的步驟,
在 apache的 httpd-vhost.conf 新增兩筆vhost
A網站用443 port,B網站用80port
但會遇到一個神奇的情形~
A網站,若直接輸入網域名稱,會自動用https連線,但若網址直接打http://A網站網址,則會跳到B網站畫面...
即使A網站在.htaccess設定了自動轉址https的語法,仍是無法自動轉向到https,
理想狀態應該是:不論輸入http或https://A網址,都會導向A網站...
檢查+測試後發現,需要多補一筆A網站的 80 port紀錄,才能讓http://www.A.com 正確指向 A網站。
另外再搭配A網站的.htaccess設定,將http自動轉址到https。
亦即是:
1.在 httpd.conf檔,找到Virtual hosts,取消註解(移除以下這行最前方的#號),讓伺服器去讀httpd-vhost.conf的設定
#Include conf/extra/httpd-vhosts.conf
改為
Include conf/extra/httpd-vhosts.conf
2.在httpd-vhost.conf檔,最後方加上設定:
A網站的443 port資訊
<VirtualHost _default_:443>
ServerName www.A.com
DocumentRoot "C:/xampp/htdocs/A"
SSLEngine on
SSLCACertificateFile "C:/xampp/ssl/ca_bundle.crt"
SSLCertificateFile "C:/xampp/ssl/A.com.crt"
SSLCertificateKeyFile "C:/xampp/ssl/A.com.key"
</VirtualHost>
A網站的80 port資訊
<VirtualHost *:80>
ServerName www.A.com
DocumentRoot "C:/xampp/htdocs/A"
</VirtualHost>
B網站的80 port資訊
<VirtualHost *:80>
ServerName www.B.com
DocumentRoot "C:/xampp/htdocs/B"
</VirtualHost>
補充:
由於是先進行搬站,沒問題才移轉正式網域到這台主機,
若尚未移轉正式網域,在本機上要作測試時,
可先將C:\Windows\System32\drivers\etc 裡的hosts檔,
增加以下:
127.0.0.1 www.A.com
127.0.0.1 www.B.com
這樣就可以模擬測試A網站和B網站的連線看到的畫面了。