WordPress .htaccess配置强制HTTPS:代码放置位置是否合理?
问题解答
不行,把HTTPS跳转的规则放在WordPress默认代码之后完全不可行,原因很简单:
WordPress默认规则里最后那条RewriteRule . /index.php [L]带有[L]标记,这个标记的作用是告诉Apache的mod_rewrite模块:"当这条规则匹配成功后,就停止处理后续所有规则了"。所以如果把HTTPS跳转的规则放在WP默认规则后面,这些跳转规则永远不会被执行,自然无法实现强制HTTPS连接的效果。
正确的配置方式
你需要把HTTPS强制跳转的规则放在WordPress默认规则的前面(也就是# BEGIN WordPress注释之前),这样请求进来后会先检查是否使用了HTTPS,如果没有就立即跳转到HTTPS版本,之后再交给WordPress的重写规则处理。
完整的.htaccess代码应该是这样的:
# 强制HTTPS连接 RewriteEngine On RewriteCond %{HTTPS} !^on$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301] # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
补充说明
- 我把跳转规则里的
[R]改成了[R=301],这是永久重定向的标记,对SEO更友好,浏览器也会缓存这个跳转规则,减少后续不必要的请求。 - 确保你的服务器已经启用了
mod_rewrite模块,否则这些规则都不会生效。
内容的提问来源于stack exchange,提问作者Bryan Raynolds
相关产品推荐
相关产品推荐

