Drupal虚拟主机子目录部署仅根URL出现Apache重定向循环问题
解决Drupal子目录部署下的ERR_TOO_MANY_REDIRECTS问题
这种子目录部署的Drupal重定向循环问题我之前在多VHost架构里碰到过几次,结合你的场景(稳定运行一年后突发首页循环),可以按以下步骤逐步排查:
1. 确认Drupal的基础URL配置
- 如果你还能访问Drupal后台(比如直接输入
subdomain.example.com/drupal/admin),进入配置 > 系统 > 站点信息,检查“默认URL”是否完全匹配实际访问的地址(包括协议、域名和子目录,比如https://subdomain.example.com/drupal)。 - 如果后台无法访问,直接修改站点根目录下
sites/default/settings.php文件,确保$base_url变量设置正确:
这个配置很容易在模块更新或部署时被意外覆盖,是重定向循环的常见原因。$base_url = 'https://subdomain.example.com/drupal'; // 替换成你的实际地址
2. 检查Web服务器的重写规则
Apache环境
- 打开Drupal根目录下的
.htaccess文件,确认RewriteBase设置为你的子目录路径:RewriteBase /drupal/ - 同时检查对应的VHost配置,确保开启了
AllowOverride All,否则.htaccess里的重写规则不会生效:<Directory /var/www/html/subdomain.example.com/drupal> AllowOverride All </Directory>
Nginx环境
- 检查VHost配置中的
location块,确保重写规则正确指向Drupal的index.php,并且子目录路径匹配:
注意不要和其他VHost的规则冲突,尤其是强制HTTPS的全局规则。location /drupal { root /var/www/html/subdomain.example.com; try_files $uri $uri/ /drupal/index.php?$query_string; rewrite ^/drupal/(.*)$ /drupal/index.php?q=$1 last; }
3. 排查HTTPS/SSL相关重定向
- 如果最近修改过SSL配置(比如新增了强制HTTPS的规则),要确保规则不会在子目录下形成循环。比如Apache中的强制HTTPS规则应该避免重复重定向:
RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] - 同时确认Drupal后台的“默认URL”使用的是和访问一致的协议(HTTP/HTTPS),混合协议很容易触发重定向循环。
4. 清除缓存与Cookie
- 浏览器端:清除当前站点的Cookie和缓存(尤其是
__Secure-SSID这类会话Cookie),旧的重定向缓存会导致循环持续。 - Drupal端:如果能访问后台,进入配置 > 开发 > 性能点击“清除所有缓存”;如果不行,直接删除
sites/default/files/cache目录下的所有文件,或者用Drush命令:drush cache:rebuild
5. 回滚最近的改动
因为你的架构已经稳定运行一年,突发问题大概率和最近的操作有关:
- 有没有更新Drupal核心、模块或主题?尝试回滚到上一个稳定版本。
- 有没有修改过VHost配置或服务器的重写规则?恢复之前的配置试试。
- 有没有部署过新的代码?检查代码变更中是否影响了URL或重定向逻辑。
内容的提问来源于stack exchange,提问作者Marvin WordWeaver Parsons
相关产品推荐
相关产品推荐

