所以我的SSL證書只適用於https://example.com - 不是https://www.example.com(不能抱怨,它是免費的)。重定向https:// www到https://非www - 沒有看到證書錯誤,可能嗎?
冒險進入mod_rewrite和大量的閱讀(大部分來自於stackoverflow)我有一個.htaccess文件,其中大部分是我需要的,這裏是該文件(當然還有域名編輯)。
<IfModule mod_rewrite.c>
RewriteEngine On
#First rewrite any request to the wrong domain to use the correct one
RewriteCond %{HTTP_HOST} !^subdomain\.
RewriteCond %{HTTP_HOST} ^(www|ftp|mail)\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
#Redirect these subdomains to a subfolder
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$
RewriteCond %1 !^(www|ftp|mail)$ [NC]
RewriteRule (.+)$ "http://example.com/%1" [L,P]
#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
該腳本包含評論它是什麼(我需要他們比你想象的更多)。 並且在被重定向的子域(在根web文件夾中的子文件夾,具有匹配的子域名)和dns服務器上的附帶dns項的文件夾上有一個額外的.htaccess文件。該文件夾中的.htaccess只會將http(端口80)重定向到https。
目前,它做我所需要的,但我正在尋找更簡單的方法來寫這個。更簡單的說,它也可能意味着更多的全球化(如果它比硬編碼域更快)以及從重寫中獲得任何速度改進。
如前所述,我的證書僅適用於非www的example.com域名,所以這使我想到了第二個(但是我的主要)問題。
像這樣路由的流量:https://www.example.com在執行任何路由,重寫等操作之前將會看到錯誤。這是因爲到這個時候甚至沒有發生過與Web服務器的連接,對嗎?這基本上是你的服務器遞交你的證書和瀏覽器說: 等一下!
有沒有辦法避免交通事故的打你的服務器的方式不當(的https:// WWW)瀏覽器給出了一個證書錯誤之前?
這並不僅限於.htaccess方法。
有沒有辦法做到這一點 - 在所有?那是什麼?
編輯:
我是有我的條件的幾個問題,並重寫擊中查詢它不應該。我也有一些重定向循環,因此前往apache.org來研究它;所以只是作爲一種方法來跟蹤在這裏說的變化是現在的.htaccess文件:
<IfModule mod_rewrite.c>
RewriteEngine On
# First rewrite any request to the wrong domain to use the correct one
RewriteCond %{HTTP_HOST} ^(www|ftp|mail)\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1
# Redirect these subdomains to a subfolder
RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.com$
RewriteCond %{REQUEST_URI} !^([^/.]+)/([^/.]+)
RewriteCond %1 !^(www|ftp|mail)$ [NC]
RewriteRule ^(.*)$ http://example.com/%1$1 [L,NC,QSA]
#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} ^http://example\.com/$ [NC]
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [L,R,NE]
</IfModule>
謝謝!這證實了我的疑惑。 我相信我可以申請一個同時包含域名(www和非www)(不確定名稱)的證書。 – avluis
@avluis @avluis大多數發行者在域名前包含「www」作爲選項,那麼您可以支付更多的額外子域名或通配證書(所有子域名) –
@JonLin也許一個解決方案?問題在於https:// www正在提供證書,這使得握手發生在htacces重定向之前。假設我們有辦法在網站的www版本上禁用SSL?這種方式沒有握手和直接執行 –