You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 9提交POST请求到/user/login时出现404错误

问题排查与解决方案

核心症状

  • /user/login页面加载正常,填写表单提交后,Nginx日志显示POST请求返回404
  • 提交后页面重定向回登录页,无任何错误提示,无法正常登录
  • 使用drush uli <username>生成的一次性链接可正常登录
  • 站点是生产环境的局域网副本,已完成本地配置调整,core/modules/user/user.routing.yaml中POST路由配置正常

排查步骤与解决方法

1. 检查Nginx的Drupal路由重写配置

Nginx未正确处理Drupal的干净URL重写是这类问题的常见诱因,尤其是POST请求。确保你的Nginx配置文件包含以下重写规则:

location / {
  try_files $uri $uri/ /index.php?$query_string;
}

如果是子目录部署的站点,需调整重写路径,示例:

location /your-subdir/ {
  try_files $uri $uri/ /your-subdir/index.php?$query_string;
}

修改后重启Nginx:sudo systemctl restart nginx

2. 验证CSRF令牌有效性

Drupal表单依赖CSRF令牌防止跨站请求伪造,令牌生成或验证失败会导致POST请求被拦截(表现为404或无提示重定向):

  • 打开浏览器开发者工具(F12)切换到网络标签,重新提交登录表单,查看POST请求的表单数据中是否包含form_token字段
  • 若没有该字段,清除浏览器缓存和Cookie后重试;若存在,检查sites/default/settings.php中的$settings['trusted_host_patterns']是否匹配本地域名,示例配置:
    $settings['trusted_host_patterns'] = [
      '^your-local-domain\.com$',
      '^localhost$',
    ];
    

3. 检查表单提交的目标路径

通过浏览器开发者工具的元素标签查看登录表单的action属性,确认是否指向正确的/user/login路径:

<form class="user-login-form" action="/user/login" method="post">

若action路径错误,检查sites/default/settings.php中的$base_url是否正确设置为本地站点的完整URL。

4. 清除Drupal路由缓存

即便路由配置正常,缓存可能导致旧配置生效,执行命令清除缓存:

drush cr

若未安装drush,可通过已登录账号访问/admin/config/development/performance页面手动清除缓存。

5. 检查Nginx请求大小限制(可选)

若表单数据过大,Nginx的client_max_body_size配置可能拦截请求,表现为404或无响应。在Nginx配置中添加或调整:

client_max_body_size 10M;

重启Nginx后重试。


内容的提问来源于stack exchange,提问作者Sp4cecat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 19:16:07