为啥在通过 mod_rewrite 强制 HTTPS 时不发送 301 重定向?

Posted

技术标签:

【中文标题】为啥在通过 mod_rewrite 强制 HTTPS 时不发送 301 重定向?【英文标题】:Why not send a 301 redirect when forcing HTTPS by mod_rewrite?为什么在通过 mod_rewrite 强制 HTTPS 时不发送 301 重定向? 【发布时间】:2012-01-31 00:54:20 【问题描述】:

网上有很多例子建议强制使用HTTPS。例如:

RewriteEngine On 
RewriteCond %SERVER_PORT 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

我没有找到任何使用301 Moved Permanentlyredirect 的示例。为什么不? 这不会避免对 HTTP 站点的进一步请求吗?以及指向 HTTP 站点的 Google 搜索结果?

RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

为什么没人使用它?还是我只是忽略了使用它的人?

【问题讨论】:

【参考方案1】:

[R] 标志将强制进行外部重定向,默认状态为 302(临时重新定位)。 AFAIK,您可以使用 [R=302,L] 将其设置为 301

我不知道您为什么在这种情况下不使用 301 而不是 302。

【讨论】:

感谢您的回答。但是,为什么人们不提出呢?根据各种来源,如果新位置是永久性的(在这种情况下就是这样),则应避免 302 重定向。 我同意,301 在这里更有意义。

以上是关于为啥在通过 mod_rewrite 强制 HTTPS 时不发送 301 重定向?的主要内容,如果未能解决你的问题,请参考以下文章

使用 .htaccess 和 mod_rewrite 强制 SSL/https

使用 mod_rewrite 强制 SSL/HTTPS [重复]

为啥 ?XDEBUG_PROFILE=true 被 mod_rewrite 忽略?

nginx为啥会强制用https

.htaccess mod_rewrite 变量通过重定向

在 nx 库中,为啥通过公共 API 强制执行模块边界?