僅針對根路徑將非 www 重定向到 www 並將 http 重定向到 https

僅針對根路徑將非 www 重定向到 www 並將 http 重定向到 https

我很難弄清楚如何針對以下條件正確配置 mod_rewrite 規則:

  • 僅針對根路徑將非 www 重定向到 www,將 http 重定向到 https:/ 即。 example.com
  • 忽略其他任何內容,例如 /test.html 即。 example.com/test.html

請注意,我正在 Apache 中編寫規則,包括目錄規則中的檔案。

這是我目前正在使用的:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

這可以正確地將所有非 www 請求重定向到 www,但它也允許 HTTP 請求,我想阻止它,但僅限於 / ie。 example.com

然後我嘗試了以下操作:

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^$ https://www.example.com [L,R=301]

這(顯然)有效,但事實證明它阻止了所有第 3 方正常運行時間監控網站發出 HTTPS get 請求,即使它在常規瀏覽器中運作良好。所以我沒主意了。

答案1

事實證明,這確實是第 3 方監控站點沒有正確遵循重定向的情況,正如@MrWhite 所建議的那樣。我透過編輯監控路徑直接透過HTTPS協定檢查來解決這個問題,從而避免了重定向。

畢竟重寫規則是正確的,我最終僅將其用於 Apache 每個目錄伺服器指令中包含的根路徑:

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^$ https://www.example.com [L,R=301]

順便說一句,對於那些在 htaccess/mod_rewrite 規則中苦苦掙扎的人,這裡有一個很棒的線上工具,它幫助我進行了很多測試:https://htaccess.madewithlove.be/

感謝大家的意見。非常感激。

相關內容