Dot-Htaccess

通過 htaccess 將所有 http 和 https 非 www URL 重定向到 https://www.example.com

  • July 22, 2018

由於太長和太複雜的原因(它涉及多層公司繁文縟節,導致其他人沒有購買我要求的萬用字元 SSL 證書),我必須設置一個域以將所有請求重定向到https://www .example.com – 帶有子域的安全協議www

編輯: SSL 證書僅對 www.xyz.com 域有效。

所以:http://example.com>、<http://www.example.com>和<https://example.com>都應該重定向到<https://www.example.com

我的 .htaccess-fu 充其量是弱的,我似乎無法讓它工作。注意:如果有影響的話,託管在 Media Temple 上。

到目前為止,我的 .htaccess 文件如下所示:

RewriteEngine On
RewriteCond %{HTTPS} !^on$
RewriteRule (.*) https://www.example.com/$1 [R,L]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

http://example.com>和<http://www.example.com>都重定向到<https://www.example.com>,所以是的。但是,<https://example.com>不會*重定向*到<https://www.example.com,因此會引發安全警告頁面:

這可能不是您要找的網站! 您試圖訪問example.com,但實際上您訪問了一個標識為www.example.com的伺服器。這可能是由於伺服器上的錯誤配置或更嚴重的原因造成的。您網路上的攻擊者可能試圖讓您訪問example.com的假冒(且可能有害)版本。

您不應該繼續,特別是如果您以前從未看到此站點的此警告。

任何幫助我度過最後一個難關的幫助將不勝感激!

您需要一個對兩者都有效的證書,example.com並且www.example.com如果您要將這些請求重寫為www.example.com(或完成此操作的兩個單獨的證書)。沒有辦法解決這個問題。

@Simbus82 關於顛倒規則是正確的。這是一種更通用的方法。

RewriteEngine On
# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

引用自:https://serverfault.com/questions/523199