2

我目前正在开发一个 Drupal 站点 (6.*),在生产模式下将通过某种 http 代理访问该站点,这意味着如果$_SERVER['HTTP_X_FORWARDED_SERVER']变量设置为,我将不得不为我的自定义主题重写所有链接人们将访问该站点的域。

该网站有很多内部链接,主要是通过Views. 我的想法是,解决这个问题的最简单方法是挂钩url()和/或l()函数,并在返回之前对 url 进行后处理(如果HTTP_X_FORWARDED_SERVER已设置)。

我的问题是我不知道如何挂钩这些功能,或者如果它甚至可以不触及核心,有没有人必须这样做?你是怎么解决的?

更新:我想我忘了提到代理不会位于代理域的根级别,所以我需要重写所有 url(内部链接和系统生成的路径到 css 文件和图像等)

例子:

proxy.com/path -> site.com/lots/of/dirs

proxy.com/path/node/1 -> site.com/lots/of/dirs/node/1

proxy.com/path/sites/all/themes/mytheme/my.css -> site.com/lots/of/dirs/sites/all/themes/mytheme/my.css

4

2 回答 2

3

我不确定我是否完全理解您的需求,但我认为您应该看看custom_url_rewrite_inbound()custom_url_rewrite_outbound()函数。

于 2011-01-10T08:50:07.133 回答
1

我最终不得不稍微修改核心,替换 bootstrap.inc 中的以下行

$server = explode('.', implode('.', array_reverse(explode(':', rtrim($_SERVER['HTTP_HOST'], '.')))));

$host = $_SERVER['HTTP_X_FORWARDED_HOST'] ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST']; 
$server = explode('.', implode('.', array_reverse(explode(':', rtrim($host, '.')))));

然后我只是用我的 proxy.com url 设置了一个新的站点文件夹,$base_url$cookie_domain在 settings.php 中进行了更改

于 2011-01-10T11:26:33.723 回答