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-urldrush config-set system.performance clean_url 1
2. 验证Docker容器内的Nginx站点级配置
虽然全局Nginx配置一致,但每个容器里可能有站点专属的location规则:
- 进入有问题的容器,确认站点根目录的
.htaccess是否被Nginx正确读取(Drupal默认的.htaccess里包含了尾斜杠补全的重写规则),如果容器内的Nginx配置忽略了这个文件,就会失效。 - 检查容器内的Nginx
location规则里是否有$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
相关产品推荐
相关产品推荐

