GCP VM部署的WordPress无法通过.htaccess实现www重定向至https怎么办
GCP VM部署WordPress时www域名跳转HTTPS不生效的解决步骤
第一步:检查基础前提配置
- 确认DNS解析已经添加www域名的A/AAAA记录,指向GCP VM的公网IP
- 确认SSL证书同时覆盖根域名和www域名,否则www访问时会先触发证书错误,无法完成重定向
- 如果你在GCP中给VM配置了Cloud Load Balancing、Cloud CDN等前置代理服务,需要确认这些服务的SSL证书已经同时覆盖根域名和www域名,且代理层没有配置冲突的重定向规则
- 如果你使用Apache作为Web服务,需要确认站点配置(默认路径
/etc/apache2/sites-available/你的站点配置.conf)中对应站点根目录的<Directory>区块里AllowOverride参数设置为All,修改后执行systemctl reload apache2生效,否则Apache不会读取.htaccess文件的配置
第二步:配置正确的.htaccess重定向规则
重定向规则需要放在.htaccess文件的最顶部,优先级高于WordPress默认的伪静态规则,否则会失效,示例配置如下:
<IfModule mod_rewrite.c> RewriteEngine On # 所有带www的请求统一跳转到无www的HTTPS地址 RewriteCond %{HTTP_HOST} ^www\.你的域名\.com [NC] RewriteRule ^(.*)$ https://你的域名.com/$1 [L,R=301,NE] # HTTP跳HTTPS规则,保留原有配置即可 RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] </IfModule> # 下方保留WordPress默认生成的伪静态规则,不要修改默认内容 <IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
配置完成后清空浏览器缓存再测试,301重定向会被浏览器长期缓存,未清缓存可能会显示旧的跳转结果。
第三步:校验WordPress站点地址配置
登录WordPress后台进入「设置」-「常规」,确认WordPress地址(URL)和站点地址(URL)都填写为你要跳转的目标地址(比如你要跳无www就填https://你的域名.com,要跳带www就填https://www.你的域名.com)。
如果无法登录后台,可以直接编辑站点根目录下的wp-config.php文件,添加以下两行配置固定站点地址:
define( 'WP_HOME', 'https://你的域名.com' ); define( 'WP_SITEURL', 'https://你的域名.com' );
如果你使用Nginx作为Web服务
Nginx默认不支持.htaccess规则,需要直接修改Nginx站点配置文件,新增独立的server块处理www域名跳转:
# 专门处理www域名的跳转 server { listen 80; listen 443 ssl http2; server_name www.你的域名.com; ssl_certificate 你的SSL证书pem文件路径; ssl_certificate_key 你的SSL证书key文件路径; return 301 https://你的域名.com$request_uri; } # 原有处理根域名请求的server块保留即可
修改完成后执行nginx -t检查配置语法是否正确,确认无错误后执行systemctl reload nginx生效。
内容的提问来源于stack exchange,提问作者Johny Arduino
相关产品推荐
相关产品推荐

