drupal_goto() не переходит на нужную мне страницу

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

Аватар пользователя bifrost bifrost 1 сентября 2011 в 17:54

Здравствуйте. Сайт имеет имя mysitename.com, во внутренней сети у него адрес хх.ххх.ххх.хх. На прокси-сервере предприятия сделали редирект с mysitename.com на хх.ххх.ххх.хх. Всё вроде бы работает нормально. Но вот в моём модуле на форме, по сабмиту нужно перейти на другой урл. Я это реализовал через drupal_goto('mymodulename/view'); но вместо того что бы перейти на нужный мне урл, попадаю на главную страницу сайта. Понятно, что функция drupal_goto построит урл - http://mysitename.com/mymodulename/view и это правильно, но мне нужно, для внутренней сети, что бы переход осуществился по адресу http://хх.ххх.ххх.хх/mymodulename/view. Не подскажете, как такое сделать? Спасибо.

Комментарии

Аватар пользователя NurOff NurOff 1 сентября 2011 в 18:10

Гемороя то сколько.
В виндах работаете?

"C:\Windows\System32\drivers\etc\hosts" wrote:

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host

# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
127.0.0.1 localhost
хх.ххх.ххх.хх mysitename.com


Строчку нужно прописывать в файл хост на всех компах с которых вы хотите иметь нормальный вход по имени сайта.
А если у вас где то там внутри стоит Windows Server (2000, 2003 или 2008), то ему добавьте роль еще одну. DNS - сервер. И там внутрь опубликуйте свой сайт.

Аватар пользователя bifrost bifrost 1 сентября 2011 в 18:16

Та такое сделано, все правильно, но нужно в броузере поставить исключение для прокси на этот сайт. А есть куча филиалов, и куча людей работает. Это не выход, бегать по всем юзерам и делать в броузере исключение. Костыли то я поставил, но костыли и есть костыли. Нужна красивая реализация.

Аватар пользователя Xermit Xermit 2 сентября 2011 в 1:31

Это называется dnat, делается на роутере через который все в локальной сетке выходят в инет, в том числе на ваш сайт, только условие пишется так, что все кто из внутренней сети лезет на этот сайт на порт 80 переслать нафиг на сервер с ip таким-то порт 80, они даже не поймут что ушли на другой сайт. правда трафик будет идти через роутер.

Аватар пользователя bifrost bifrost 2 сентября 2011 в 10:05

Так выше я написал, что такое сделали, только не роутером, а средствами прокси-сервера. У кого интернета нет, тот через прокси не ходит и соответственно подставляется всё нормально внутренним днс-сервером. А тем у кого интернет есть, нужно поставить исключение на прокси, но не будешь ты ж бегать по куче юзеров.
Вот в модуле меню я тоже указываю друпаловский путь, и люди которые заходять на хх.ххх.ххх.хх то Друпал достривает путь хх.ххх.ххх.хх/?q=node/1 а в праймари-линкс стоит на пункт меню адрес - node/1

в моём модуле на кнопке сабмит была конструкция
$form_state['redirect'] = 'mymodule/view/';
и такая конструкция
drupal_goto('mymodule/view/');

но эти конструкции выстраивают адрес http://mysaitename.com/mymodule/view/ а прокся не понимает, нужно что бы было
http://хх.ххх.ххх.хх/mymodule/view/, какой модуль друпала посмотреть, что бы реализовать и в своём коде такое же?

Аватар пользователя Xermit Xermit 2 сентября 2011 в 11:10

с помощью dnat на роутере, максимум чтобы вы сделали, это в днс указали вместо ip адреса текущего сервера адрес роутера, это раз, и второе задали бы два правила, что те кто из инета идет переслать туда то, а те кто из внутренней сети слать туда то. И те и другие как ходили на сайт по имени а не по ip так и ходят, только внутренние юзеры даже не заметят что их на другой сервер редиректят, или сервер один и тот же все таки, тогда нафига такие танцы с бубном.
И даже если drupal_goto построит адрес в котором будет имя, перередиректит он его опять таки на нужный сервер.
Почему бы если на то пошло не указать полный адрес самому для drupal_goto
$path A Drupal path or a full URL. Воспользуйтесь функцией
http://api.drupal.org/api/drupal/includes--common.inc/function/url/6

а потом скормите его в drupal_goto, предварительно заменив адрес сайта на ip.

Да и в settings.php кто мешает заменить
$base_url = 'http://localhost'; // NO trailing slash!
на ip
возможно по условию проверите что ip источника из вашей сетки
в _SERVER["REMOTE_ADDR"]
и динамически будете менять $base_url, если конечно drupal-u крышу не снесет от этого

Аватар пользователя bifrost bifrost 8 сентября 2011 в 11:17

Хочу поблагодарить за ответы всех кто откликнулся.
То Xermit: сделал почти так как вы предложили, то есть костыли. Ну пока работает. Но это не правильно. Ещё раз, спасибо.