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

Drupal 8+Nginx多站点无尾斜杠404问题求助

解决Drupal 8单域名多站点无尾斜杠返回404的问题

嘿,这个问题我之前维护多站点Drupal集群的时候也碰到过!虽然Nginx全局配置看起来完全一致,但个别站点的尾斜杠处理差异,大概率是Drupal自身设置、容器内的细节配置或者缓存搞的鬼,给你几个排查和解决的方向:

1. 先查Drupal站点的settings.php配置

有问题的那4个站点,先去看它们的settings.php文件:

  • 重点看$base_url的设置:如果这个值没有以尾斜杠结尾,会直接打乱Drupal内部的URL重写和路由逻辑。比如要改成这样:
    $base_url = 'https://example.com/site1/'; // 必须带最后的斜杠
    
  • 检查clean_url状态:干净URL没开启的话,也会导致无尾斜杠的请求解析失败。用Drush快速查看:
    drush status clean-url
    
    如果显示禁用,执行这条命令开启:
    drush config-set system.performance clean_url 1
    

2. 验证Docker容器内的Nginx站点级配置

虽然全局Nginx配置一致,但每个容器里可能有站点专属的location规则:

  • 进入有问题的容器,确认站点根目录的.htaccess是否被Nginx正确读取(Drupal默认的.htaccess里包含了尾斜杠补全的重写规则),如果容器内的Nginx配置忽略了这个文件,就会失效。
  • 检查容器内的Nginxlocation规则里是否有$uri/这个部分:
    location /site1 {
      try_files $uri $uri/ /site1/index.php?$query_string;
    }
    
    这里的$uri/是关键——它会自动尝试访问目录并补全尾斜杠,如果这条规则没生效,就会直接返回404。

3. 检查Drupal模块和路由配置

  • 确认Pathauto模块的规则:如果这几个站点装了Pathauto,看看URL别名规则里有没有处理尾斜杠的设置,规则缺失可能导致生成的URL本身就不带斜杠,进而引发访问问题。可以去后台配置 > 搜索和元数据 > URL别名里检查。
  • 强制清除站点缓存:缓存过期或者异常也会导致路由解析出错,执行drush cr或者在Drupal后台手动清除缓存,很多时候这就能解决问题。

4. 排除缓存类干扰

如果生产环境用了CDN或者浏览器缓存了旧的重定向规则,也可能出现个别站点行为不一致:

  • 用匿名浏览器窗口访问测试,排除本地浏览器缓存的影响;
  • 如果有CDN,手动清除对应站点的CDN缓存,确保最新的重写规则生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:29:24