https是大势所趋,尤其对电商网站和seo网站更为重要。ssl证书配置好后,需要将原来的http链接全部301跳转https链接,本以为是个简单的问题,百度一搜索果然有答案,然而结果却令人头疼。大伟的wordpress网站是apapche服务器,修改了.htaccess文件后,并没有生效。百度到的都说是这样来写:

RewriteEngine On 
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L]

含义就是不是443端口访问的都301跳转到https链接,然而上传到服务器后只有首页跳转,其他页面死活不动。

继续搜索,找到这一段,逻辑和基本相同,80端口访问的跳转https链接,但还是只有首页生效。

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]

折腾许久,我开始怀疑是服务器的问题,去请教大佬也没个结果。过了几天,才无意发现了问题所在。

原来是代码的位置放的不对,下面是wordpress自带的.htaccess文件内容,这一行:RewriteBase /限制了网站根目录生效,而我把新加的规则放在了其后,所以只对首页生效。

# 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全站https跳转,下面为wordpress全站http跳转https的.htaccess文件。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$	
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L]

RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress