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

如何将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或数据库操作:

  1. 替换节点内容链接:
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');" # 适配其他字段
  1. 更新路径别名与菜单:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:35:08