WordPress多页面PHP表单异常:Page2提交后Page3出现404错误
解决WordPress表单提交后跳转到404页面的问题
这种表单提交后跳404的情况在WordPress里真的挺闹心的,尤其是明明页面存在却跳不过去,我帮你梳理几个大概率能解决问题的方向:
1. 先把表单的action路径改稳
你Page2的路径是offer/details/,如果表单用的是相对路径action="results/",理论上会指向目标页面,但WordPress的固定链接偶尔会出现解析偏差,不如直接用绝对路径更靠谱。把表单的action改成:
action="<?php echo esc_url(home_url('/offer/details/results/')); ?>"
同时别忘了去WordPress后台确认页面层级:确保results页面是details页面的子页面,这样路径结构才完全匹配。
2. 刷新WordPress的固定链接规则
这是解决路径类404的常用小技巧:
- 登录WordPress后台,进入「设置」→「固定链接」
- 先随便选一个不同的规则(比如「朴素」),点击保存
- 再改回你原来用的规则(比如「文章名」),再次保存
这样会强制刷新WordPress的重写规则,很多路径解析的小问题都能靠这个解决。
3. 检查Page3的处理逻辑和权限
如果Page3是用来接收表单数据的,要确保:
- 它的页面状态是「发布」,不是草稿或私密状态
- 如果用了自定义页面模板,模板里没有拦截POST请求的代码(比如错误的条件判断,或者只允许GET请求)
- 提交表单的用户有访问Page3的权限(如果是会员专属页面的话)
4. 排查插件或主题冲突
安全插件(比如Wordfence)、缓存插件甚至主题本身的重写规则都可能拦截表单提交:
- 先暂时禁用所有插件,切换到WordPress默认主题(比如Twenty Twenty-Four)
- 测试表单提交,如果能正常跳转到Page3,再逐个启用插件和主题,找出搞事情的那个
5. 检查Apache服务器的.htaccess文件(如果用的是Apache)
如果你的服务器是Apache,.htaccess里的重写规则可能出了问题。先备份原文件,然后替换成WordPress默认的规则试试:
# 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
替换后刷新页面,再测试表单提交。
你可以先从调整表单action路径和刷新固定链接开始,这两个是最常见的触发原因,大概率能解决问题。
内容的提问来源于stack exchange,提问作者Grey-lover




