Переопределение функции l() в Drupal
-
09-10-2019 - |
Вопрос
В настоящее время я работаю над сайтом 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
Решение
Я не уверен, что полностью понимаю, что вам нужно, но я думаю, вам следует взглянуть на пользовательский_url_rewrite_inbound() и пользовательский_url_rewrite_outbound() функции.
Другие советы
В итоге мне пришлось немного изменить ядро, заменив строку ниже в 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