Переопределить функцию l () в Drupal

В настоящее время я работаю над сайтом 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


person Marco    schedule 10.01.2011    source источник


Ответы (2)


Я не уверен, что полностью понимаю, что вам нужно, но я думаю, вам стоит взглянуть на custom_url_rewrite_inbound () и custom_url_rewrite_outbound () функций.

person marcvangend    schedule 10.01.2011
comment
Посмотрев на это побольше, это, вероятно, правильный способ сделать это (никогда раньше не слышал об этих функциях), и, похоже, он помогает, и я запомню это для будущих усилий, спасибо :) Мое решение для взлома дало у меня есть возможность иметь отдельные файлы настроек для каждого URL-адреса, который может получить доступ к сайту (включая прокси), что оказалось более полезным, чем я планировал вначале, поэтому я могу придерживаться этого пока :) - person Marco; 10.01.2011
comment
Я думаю, что вы все еще можете различать разные входящие URL-адреса внутри custom_url_rewrite_inbound (), если вы включите переменную $ _SERVER ['SERVER_NAME']. - person marcvangend; 10.01.2011
comment
правда, что :) хотя мне также нужно установить домен cookie для прокси и иметь другое соединение с базой данных - person Marco; 11.01.2011

В итоге мне пришлось немного изменить ядро, заменив строку ниже в 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, '.')))));

Затем я просто создал новую папку сайта с моим URL-адресом proxy.com и изменил $base_url и $cookie_domain в settings.php

person Marco    schedule 10.01.2011
comment
Изменение основного кода - не лучшая идея, так как у вас возникнут проблемы при попытке обновить версию drupal. - person João Guilherme; 10.01.2011
comment
Мне это хорошо известно, но срок жизни этого сайта составляет около трех месяцев, и я очень спешил с этим, поэтому пришлось это сделать. Я все еще открыт для законного решения проблемы :) - person Marco; 10.01.2011