在我的面向公众的主机上,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 最早提到这个想法我能找到的。