Drupal7多站点配置后仍连接同一数据库问题求助
问题根因
- Drupal 7多站点目录命名规则不匹配访问路径
你当前的访问地址格式是http://<宿主机IP>:18080/d和http://<宿主机IP>:18080/e,Drupal 7多站点默认的目录匹配逻辑会优先识别「访问IP+端口+路径后缀」的组合,你现有的ipaddress.d、ipaddress.e没有包含宿主机映射的18080端口,也没有匹配路径规则,导致两个访问请求最终都落到同一个站点的配置(默认兜底的default站点配置),所以读取了同一个数据库参数。 - Apache配置存在冗余错误,未传递正确的路径上下文
你当前的VirtualHost配置重复定义了DocumentRoot,且<Directory />指向服务器根目录属于不合理配置,Alias配置仅完成了路径映射到Drupal根目录,但没有保证Drupal能正确获取到请求的路径前缀用来匹配站点目录。
解决方案
步骤1:匹配Drupal多站点识别规则
两种方案二选一即可:
- 方案A:直接按匹配规则重命名站点目录
将ipaddress.d重命名为<宿主机IP>.18080.d,将ipaddress.e重命名为<宿主机IP>.18080.e,统一放到Drupal根目录的sites文件夹下即可。 - 方案B:修改
sites/sites.php添加显式映射
打开Drupal根目录下的sites/sites.php(如果不存在就复制sites/default.sites.php重命名为sites.php),添加以下代码:
无需修改原有站点目录名称即可生效。$sites['<宿主机IP>.18080.d'] = 'ipaddress.d'; $sites['<宿主机IP>.18080.e'] = 'ipaddress.e';
步骤2:修正Apache配置
将现有VirtualHost配置替换为以下内容,删除冗余重复的配置项:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html <Directory /var/www/html> Options FollowSymLinks AllowOverride All Require all granted </Directory> Alias /d /var/www/html Alias /e /var/www/html ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
修改后重启Apache服务生效。
步骤3:验证配置
清空Drupal全站缓存后,分别访问两个站点,即可确认数据库连接已按配置区分。
内容的提问来源于stack exchange,提问作者chukwuka mark
相关产品推荐
相关产品推荐

