Ssl
轉發到 https 保持 URL 完整/完整
我想將所有流量轉發到 https。URL 中可能存在應保持不變的子域和子路徑。例子:
http://subdomain.myDomain.me -> https://subdomain.myDomain.me http://myDomain.me/subpath -> https://myDomain.me/subpath http://subdomain.myDomain.me/subpath -> https://subdomain.myDomain.me/subpath
我使用以下程式碼嘗試了這個簡潔的評估器(來自此處的連結)中的範例:
RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https:/$1
在評估器中,一切都很好。 真正的虛擬主機是這樣的:
<virtualHost *:80> ServerName myDomain.me RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https:/$1 </VirtualHost>
嘗試訪問真實站點時,會發生這種情況:
http://subdomain.myDomain.me -> http://subdomain.myDomain.me # fail - no https http://myDomain.me/subpath -> https://myDomain.mesubpath # fail - subpath appended to top-level domain http://subdomain.myDomain.me/subpath -> https://subdomain.myDomain.me/subpath # success
這個重寫有什麼問題?
正確的規則如下。
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
然而,這不是將 HTTP 請求重定向到 HTTPS 的推薦方法。首選方法是在 Apache confit 中使用重定向來指向啟用 SSL 的站點。
您可以在Apache Httpd wiki上詳細了解首選方法。
RewriteEngine On #RewriteCond %{HTTPS} off # you can skip this if you want to redirect everything RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NC]
如果這不起作用,請嘗試:
RewriteRule ^(/(.*))?$ https://%{HTTP_HOST}/$1 [R=301,L,NC]
不要忘記發送
R=301
標誌以使重定向永久化。