WooCommerce添加购物车等表单仅用HTTP,HTTPS网站无法正常运行
解决WooCommerce表单跳转HTTP的问题
以下是针对你遇到的表单(加购、购物车更新)跳转HTTP导致错误的额外排查和修复方案:
1. 检查wp-config.php的硬编码URL
WordPress的站点URL可能被wp-config.php中的常量覆盖,即使你修改了数据库wp_options表。打开wp-config.php,添加或修改以下内容:
define('WP_HOME', 'https://你的域名.com'); define('WP_SITEURL', 'https://你的域名.com');
保存后刷新站点,测试表单提交。
2. 强制WooCommerce表单使用HTTPS URL
通过WordPress钩子直接修改WooCommerce生成的表单action URL,强制替换HTTP为HTTPS。将以下代码添加到当前主题的functions.php文件中:
add_filter('woocommerce_get_form_action_url', 'force_woocommerce_form_https'); function force_woocommerce_form_https($url) { return str_replace('http://', 'https://', esc_url_raw($url)); }
这个钩子会直接拦截WooCommerce生成的表单地址,确保所有表单都使用HTTPS。
3. 验证服务器重写规则是否正确
Apache环境
检查站点根目录的.htaccess文件,确保包含完整的HTTPS跳转规则:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
同时确保WooCommerce的默认重写规则在下方:
# BEGIN WooCommerce <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 WooCommerce
Nginx环境
在站点的server配置块中添加HTTPS跳转规则:
server { listen 80; server_name yourdomain.com www.yourdomain.com; return 301 https://$server_name$request_uri; }
确保HTTPS的server块配置正确,包含SSL证书路径和必要的头信息。
4. 批量替换数据库中的HTTP URL残留
除了wp_options表,数据库的其他表(如wp_postmeta、wp_posts)可能仍存在HTTP URL。使用WP CLI执行批量替换(需服务器支持WP CLI):
wp search-replace 'http://你的域名.com' 'https://你的域名.com' --skip-columns=guid
如果没有WP CLI,可使用WordPress后台的搜索替换插件(如Better Search Replace),注意勾选“运行干测试”先验证替换内容。
5. 排查主题/插件冲突
- 暂时切换到WooCommerce官方默认主题Storefront,测试表单是否正常。
- 禁用所有非WooCommerce的插件,逐个重新启用,每次测试表单提交,定位冲突插件。
6. 清除所有缓存
- 清除站点缓存插件(如WP Rocket、W3 Total Cache)的缓存。
- 清除CDN缓存(如Cloudflare、阿里云CDN)。
- 清除浏览器缓存,使用无痕模式测试。
内容的提问来源于stack exchange,提问作者Calum Childs
相关产品推荐
相关产品推荐

