Drupal 位于反向代理后面的子目录中

Drupal 位于反向代理后面的子目录中

在我的面向公众的主机上,Apache 充当非公共主机的反向代理,其中 Drupal 9 实例在 Web 根目录下进行符号链接。Drupal 会响应请求,但它会输出任何包含符号链接名称的本地链接。显然是因为 PHP 请求变量$_SERVER['SCRIPT_NAME']包含它。

我如何告诉 Drupal 它的“实际”基本路径?

细节

公共主机配置:

<Location "/">
  ProxyPreserveHost on
  ProxyPassReverse "https://otherserver/webb/"
</Location>

在 上otherserver,我的域名example.com是一个虚拟主机,其根目录位于/var/www/sites/example.com/html。有此符号链接webb,指向 Drupal 位置:

/var/www/sites/example.com/html/webb -> /var/www/sites/example.com/html/drupal8/web/

Drupal 做出了响应,但在响应 HTML 中,应该为 的链接/about却变成了/webb/about,资产等也是如此。

如果我回应$_SERVER['SCRIPT_NAME'],我就会得到/webb/index.php

答案1

我通过修改REQUEST_URI和解决SCRIPT_NAME了这个问题settings.php

$trim_path = '/webb';
if (isset($GLOBALS['request'])) {
  $request = $GLOBALS['request'];
  if ($request->server->get('SCRIPT_NAME') == "$trim_path/index.php") {
    $request->server->set('SCRIPT_NAME', '/index.php');
    $request_uri = substr($request->server->get('REQUEST_URI'), strlen($trim_path));
    $request->server->set('REQUEST_URI', $request_uri);
  }
}

感谢 lightsurge 最早提到这个想法我能找到的。

相关内容