один сайт на два адреса?

Главные вкладки

Аватар пользователя freem freem 23 января 2012 в 17:57

ситуация такая: в конторе есть интранет и там для внутренних сайтиков выделяется адрес: "http://<внутр. домен>/~user", снаружи этот же сайт доступен по адресу: "http://<внешний домен>/web/~user" доступа к сервакам у меня нет... ставлю drupal все проходит нормально, но после установки работает только изнутри из интранета.. при попытке доступа извне - на главной странице выдает только текстовку - без оформления и картинок - ясное дело проблема в ссылках... ссылки выставляет "http://<внешний домен>/~user/..." (пропуская промежуточное /web)... нахожу в settings.php переменную base_url - прописываю там полный путь до корня сайта из внешнего интернета - вроде начинает работать: картинки и оформление грузится но почему-то не пускает в админку - при неверном логине/пароле ругается, при верном просто перегружает страницу как будто ничего и не вводили... - сессия не заводится?странно очень.... ну и понятное дело перестает работать из интранета...
подскажите как можно разрешить все так, чтобы работало с обоих адресов? у самого пока родилось только поискать модуль ответственный за прописание ссылок и выяснять там текущий адрес и жестко в начало дописывать один или другой вариант (но это в надежде что все ссылки проходят через один и тот же модуль)... но может есть способ изящней?

Комментарии

Аватар пользователя cunard cunard 24 января 2012 в 4:25

"freem" wrote:
админы у нас больно консервативные... не хотят ничего менять :(

одна машина не может ехать по московской и лениной одновременно, как и друпал)
все что идет после http://<внешний домен>/... многоточия руководится друпалом.

Зы: Может модуль Pathauto (хотя маловероятно)

Аватар пользователя Orion76 Orion76 24 января 2012 в 6:54

А по принципу мультисайтинга, только с одной БД не пробовали?
Смысл, разделить settings.php для внешнего и внутреннего адреса (разные $base_url)

в папке /sites создаете 2 папки /sites/внешний_домен , /sites/внутренний_домен
в обе папки кидаете settings.php и устанавливаете $base_url как надо
как я понял,
для внутреннего: $base_url = http://<внутр. домен>/~user
для внешнего: $base_url = http://<внешний домен>/web/~user

Настройки БД одинаковые.

Аватар пользователя freem freem 24 января 2012 в 8:08

"orion76" wrote:
А по принципу мультисайтинга, только с одной БД не пробовали?

была мысль что это может помочь - но не уверен был (я вообще drupal первый раз "вижу", поэтому не очень в теме.. пытаюсь разобраться... хотя ранее был опыт php программирования). Заодно подскажите: разные папки внутри site какие файлы должны/могут теоретически содержать, кроме settings.php, и не придется ли потом решать вопросы синхронизации между двумя версиями одного сайта (про то что базу одну можно использовать я понял, но всеже..)
и еще камень в огород этого способа: не пойму почему возникли проблемы с авторизацией в админку при изменении $base_url = http://<внешний домен>/web/~user (еще раз: на неверные логин/пароль реагирует ожидаемо, на верные - никак не реагирует - то есть опять предлагается ввести логин пароль без всяких ошибок) - при пустом base_url из интранет с авторизацией все нормально.

ЗЫ. Буду пока экспериментировать с подстановкой base_url в common.inc...

Аватар пользователя Orion76 Orion76 24 января 2012 в 9:09

"freem" wrote:
Заодно подскажите: разные папки внутри site какие файлы должны/могут теоретически содержать, кроме settings.php, и не придется ли потом решать вопросы синхронизации между двумя версиями одного сайта (про то что базу одну можно использовать я понял, но всеже..)

если сайты работают каждый на своей БД,там же можно разместить папки themes modules для персональных тем и модулей сайта, но в вашем случае этого не нужно, достаточно только settings.php и в нем правильно прописать $base_url

"freem" wrote:
и еще камень в огород этого способа: не пойму почему возникли проблемы с авторизацией в админку при изменении $base_url = http://<внешний домен>/web/~user (еще раз: на неверные логин/пароль реагирует ожидаемо, на верные - никак не реагирует - то есть опять предлагается ввести логин пароль без всяких ошибок) - при пустом base_url из интранет с авторизацией все нормально.

как раз в этом все и дело, если не указывать явно $base_url то его значение по умолчанию берется (если не ошибаюсь) Имя_домена из запроса.
Если вы явно указали $base_url для внешнего адреса, то для внутреннего он будет неправильным..

А данные сесии пишутся в куки, а куки "привязываются" домену(он же базовый урл).
Поэтому и авторизация не "сохраняется"

"freem" wrote:
и не придется ли потом решать вопросы синхронизации между двумя версиями одного сайта (про то что базу одну можно использовать я понял, но всеже..)

Если базы не разделять(использовать одну) то ничего синхронизировать ненадо, сайты будут различаться только значением переменной $base_url.

Кстати... если способ с указанием для каждого адреса своего settings.php ненравиться, можно в дефолтном settings.php анализировать адрес запроса и присваивать $base_url нужное значение.

Аватар пользователя freem freem 24 января 2012 в 14:59

уфф... вроде сделал... мультисайтинг не пошел - как оказалось $_SERVER['HTTP_HOST'] выдавал всегда <внутренний домен> внезависимости откуда я зашел изнутри или снаружи (при том что в адресной строке может стоять именно <внешний домен>) - видимо поэтому-же при мультисайтинге - сколько я не создавал директорий под внешний домен - он все равно ходил через settings внутреннего Sad почему оно так - без доступа к серверу я видимо не узнаю... эмпирическим путем нашел $_SERVER['HTTP_X_FORWARDED_SERVER'] который дает то что нужно. В итоге в файле settings.php единственного сайта прописал

if ($_SERVER['HTTP_X_FORWARDED_SERVER']=='<внешний домен>') {
   $base_url = 'http://'.$_SERVER['HTTP_X_FORWARDED_SERVER'].'/web/~user';  // NO trailing slash!
}

пока вроде работает.. но надо погонять - вдруг этот forwarded может нитуда сослаться... спасибо за наводки!
кстати с авторизацией решилось аналогично, только с переменной $cookie_domain

Аватар пользователя freem freem 24 января 2012 в 16:49

хмм.. погонял - обнаружилось по крайней мере что в form action="" подставляется адрес без домена то есть /~user/... что в моем случае при заходе извне пропускает проставку /web/ Sad в итоге никакие настройки в админке не работают... завтра буду копать дальше...