如何将Drupal 10从子域名迁移至主域名的/events路径?
Drupal 10 从子域名迁移到主域名子路径(/events)的实现方案
一、前端反向代理NGINX配置
前端代理服务器需将所有/events开头的请求转发至Drupal后端,同时传递必要头部让Drupal识别请求基准路径。示例配置:
server { listen 80; server_name mydomain.com; # 转发/events路径请求到Drupal服务器 location /events { proxy_pass http://drupal-server-ip:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递基准路径给后端 proxy_set_header X-Forwarded-Prefix /events; proxy_set_header X-Forwarded-Uri $request_uri; } # 其他路径转发至非Drupal站点 location / { proxy_pass http://non-drupal-server-ip:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
二、Drupal后端服务器NGINX配置
后端需处理前端转发的请求,去掉/events前缀后映射到Drupal入口,同时配置FastCGI参数让PHP正确识别路径:
server { listen 80; server_name events.mydomain.com; # 保留原域名兼容过渡 root /path/to/drupal/web; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 适配你的PHP版本 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 用反向代理头部修正SCRIPT_NAME fastcgi_param SCRIPT_NAME $http_x_forwarded_prefix$fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param HTTP_X_FORWARDED_PREFIX $http_x_forwarded_prefix; fastcgi_param HTTP_X_FORWARDED_HOST $http_x_forwarded_host; } }
三、Drupal settings.php 核心配置
编辑web/sites/default/settings.php,添加以下配置指定基准路径并信任反向代理:
# 信任前端代理IP,多个IP用逗号分隔 $settings['reverse_proxy'] = TRUE; $settings['reverse_proxy_addresses'] = ['192.168.1.100']; # 替换为前端代理实际IP # 设置站点基准路径,生成正确链接的关键 $settings['base_path'] = '/events'; # 更新可信主机规则 $settings['trusted_host_patterns'] = [ '^mydomain\.com$', '^events\.mydomain\.com$', # 保留原域名过渡 ];
四、内容与路径批量更新
替换内容中旧子域名的绝对链接,可通过Drush或数据库操作:
- 替换节点内容链接:
drush sqlq "UPDATE node__body SET body_value = REPLACE(body_value, 'https://events.mydomain.com', '/events');" drush sqlq "UPDATE node__field_* SET field_*_value = REPLACE(field_*_value, 'https://events.mydomain.com', '/events');" # 适配其他字段
- 更新路径别名与菜单:
drush sqlq "UPDATE url_alias SET alias = REPLACE(alias, '/', '/events/') WHERE alias NOT LIKE '/events/%';" drush cr menu
五、缓存清理
完成所有配置后,清理Drupal全量缓存:
drush cr
或登录后台进入配置 -> 开发 -> 性能,点击"清除所有缓存"。
内容的提问来源于stack exchange,提问作者Josh Cronin
相关产品推荐
相关产品推荐

