仅将根路径的非 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 请求,我想阻止这些请求,但仅限于 / 即 example.com

然后我尝试了以下操作:

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

这(显然)有效,但结果发现它阻止了所有第三方正常运行时间监控网站发出 HTTPS 获取请求,尽管它在常规浏览器中运行良好。所以我没有主意了。

答案1

事实证明,这确实是第三方监控网站没有正确遵循重定向的情况,正如@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/

感谢大家的意见。非常感谢。

相关内容