WordPress 中的 .htaccess 莫名其妙的被还原了,导致站点不能强制使用 https 了。
今天准备做一次站点的本地备份,就把主机上的备份拉了下来。在比对文件的时候,发现备份下来的 .htaccess 文件和本地已有的文件不一样,上次写入强制使用 https 的规则莫名奇妙的消失了。不过让我更疑惑的是:站点现在还是强制使用 https 访问的,可是在浏览器的隐私模式下却没有强制使用 https 访问。原因是浏览器的缓存没有清除,当然这是后面才发现的。
装完 WordPress 并在后台设置伪静态的“固定链接”后,WordPress 会自动生成一个包含如下内容的 .htaccess 文件:
当然 WordPress 只会复写
今天准备做一次站点的本地备份,就把主机上的备份拉了下来。在比对文件的时候,发现备份下来的 .htaccess 文件和本地已有的文件不一样,上次写入强制使用 https 的规则莫名奇妙的消失了。不过让我更疑惑的是:站点现在还是强制使用 https 访问的,可是在浏览器的隐私模式下却没有强制使用 https 访问。原因是浏览器的缓存没有清除,当然这是后面才发现的。
装完 WordPress 并在后台设置伪静态的“固定链接”后,WordPress 会自动生成一个包含如下内容的 .htaccess 文件:
# 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强制使用 https 的规则被我放在了
RewriteEngine On
语句的下面,今天发现自己写的规则不见了。在网上找到了一个原因:只要你点击了 WordPress 后台“设置”中的“固定链接”,不管你是否做了修改,只要点击了“固定链接”,.htaccess 中 # BEGIN WordPress
和 # END WordPress
之间的内容就会被 WordPress 复写。自己亲自测试过了,这个问题确实存在。当然 WordPress 只会复写
# BEGIN WordPress
和 # END WordPress
之间的内容,因此这个问题最好的解决方案是:把自己将要添加的 .htaccess 规则,写在 # BEGIN WordPress
和 # END WordPress
之外就可以了,比如写入强制使用 https 的规则如下:# BEGIN SSL <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} !^on$ [NC] RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] </IfModule> # END SSL # 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在向客服咨询的时候,技术人员有提到一点:WordPress 更新也会导致这个问题。恰巧在今天 WordPress 自动更新了一次,而自己又点过后台的“固定链接”,因此我不能确定技术人员描述的问题是否属实。除此之外,还要考虑将自己写入的注释说明弄得特殊一点,其 中
# BEGIN SSL
和 # END SSL
就是注释说明,以免遇到某个插件会在你的注释说明之间写入规则,进而导致你自己的规则无故消失.