Mod-Rewrite
僅針對根路徑將非 www 重定向到 www 和 http 到 https
我很難弄清楚如何為以下條件正確配置 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/
謝謝大家的意見。非常感激。