Mod-Rewrite

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

  • August 25, 2018

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

  • 僅針對根路徑將非 www 重定向到 www 和 http 到 https:/ 即。例子.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 請求,我想阻止但僅限於 / 即。例子.com

然後我嘗試了以下方法:

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

這(顯然)有效,但事實證明它阻止了所有 3rd 方正常執行時間監控站點發出 HTTPS 獲取請求,即使它在正常瀏覽器中執行良好。所以我沒有想法。

事實證明,正如@MrWhite 所建議的那樣,這確實是第 3 方監控站點未正確遵循重定向的情況。我通過編輯監控路徑以直接通過 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/

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

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