覆盖Drupal中的l()函数

时间:2011-01-10 07:55:10

标签: drupal drupal-6 http-proxy internal-link

我目前正在开发一个Drupal网站(6. *),它在生产模式下将通过某种http代理访问,这意味着如果{我必须重写我的自定义主题的所有链接{1}}变量设置为人们将从中访问网站的域。

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

我的问题是我无法弄清楚如何挂钩这些功能,或者如果没有触及核心甚至可能,有人必须这样做吗?你是怎么解决的?

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

示例:

HTTP_X_FORWARDED_SERVER

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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网址设置了一个新的网站文件夹,并更改了settings.php中的$base_url$cookie_domain