WordPress Contact Form 7多语言页面AJAX提交报错问题求助
问题根因
Weglot的多语言URL重定向规则拦截了Contact Form 7(简称CF7)的REST API提交请求:
- 翻译页面的CF7 AJAX请求发送到根路径
/wp-json/xxx时,Weglot会自动301重定向到带语言前缀的路径(比如/de/wp-json/xxx) - 301重定向会自动把
POST请求转为GET请求,而CF7的提交接口仅支持POST方法,因此返回404路由不存在错误,多次跳转就触发了重定向过多报错
可行解决方案(按优先级排序)
方案1:配置Weglot排除REST API路径(首选)
这是最简单无侵入的方案:
- 进入WordPress后台 → Weglot → 高级设置
- 找到「要排除的URL」配置项,添加规则
/wp-json/* - 保存设置后清空Weglot缓存、站点缓存、浏览器缓存再测试即可
方案2:手动修改CF7提交接口路径(方案1无效时用)
将以下代码添加到当前主题的functions.php文件,或通过代码片段插件引入,强制CF7使用无语言前缀的根路径接口:
add_filter( 'wpcf7_feedback_rest_url', function( $rest_url, $form ) { // 强制返回根域名下的CF7提交接口,不受语言前缀影响 return home_url( '/wp-json/contact-form-7/v1/contact-forms/' . $form->id() . '/feedback' ); }, 10, 2 );
方案3:修改.htaccess规则优先放行REST API请求
如果是服务器重定向规则优先级问题,在现有.htaccess的RewriteEngine On下方添加一行规则,优先放行所有wp-json请求:
<IfModule mod_rewrite.c> RewriteEngine On # 新增下面这行,优先处理REST API请求,不参与多语言重定向 RewriteRule ^wp-json(/.*)?$ - [L] RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
修改完保存后重启Apache(或重载配置),清空缓存测试即可。
内容的提问来源于stack exchange,提问作者JaKoZo
相关产品推荐
相关产品推荐

