Php
反向代理後面的子目錄中的 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
。
我通過改變
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 表示敬意。