Вы должны использовать drupal_goto () для внутреннего и внешнего перенаправления.
Используйте «внешний» вариант для внешних перенаправлений:
drupal_goto($url, array('external' => TRUE));
drupal_goto ($ path = '', array $ options = array (), $ http_response_code = 302)
$ options: (необязательно) Ассоциативный массив дополнительных опций со следующими элементами:
- 'query' : массив пар «ключ-значение» (без какой-либо кодировки URL) для добавления в URL.
- 'фрагмент' : идентификатор фрагмента (именованный якорь) для добавления в URL. Не включайте ведущий символ #.
- 'absolute' : по умолчанию FALSE. Нужно ли указывать вывод как абсолютную ссылку (начиная с http :). Полезно для ссылок, которые будут отображаться за пределами сайта, например, в ленте RSS.
- «псевдоним» : по умолчанию FALSE. Является ли данный путь уже псевдонимом URL.
- 'external' : является ли данный путь внешним URL-адресом.
- «язык» : необязательный объект языка. Если путь, по которому идет ссылка, является внутренним по отношению к сайту, $ options ['language'] используется для поиска псевдонима для URL. Если $ options ['language'] опущен, будет использован глобальный $ language_url.
- «https» : должен ли этот URL-адрес указывать на безопасное местоположение. Если не определено, используется текущая схема, поэтому пользователь остается на HTTP или HTTPS соответственно. TRUE обеспечивает HTTPS, а FALSE - HTTP, но HTTPS может быть применен только в том случае, если для переменной https установлено значение TRUE.
- 'base_url' : используется только для внутреннего использования, чтобы изменить базовый URL, когда этого требует язык, зависящий от URL.
- 'prefix' : используется только внутри, чтобы изменить путь, когда этого требует зависящий от языка URL.
- 'script' : имя файла сценария в корневом каталоге Drupal для использования, когда чистые URL отключены, например, index.php. По умолчанию используется пустая строка, так как большинство современных веб-серверов автоматически находят «index.php». Если чистые URL-адреса отключены, значение $ path добавляется в качестве параметра запроса 'q' к $ options ['script'] в возвращаемом URL-адресе. При развертывании Drupal на веб-сервере, который не может быть настроен на автоматический поиск index.php, можно реализовать функцию hook_url_outbound_alter (), чтобы принудительно установить это значение в index.php.
- «entity_type» : тип сущности объекта, вызвавшего url (). Устанавливается только если url () вызывается entity_uri ().
- 'entity' : объект-сущность (например, узел), для которого создается URL. Устанавливается только если url () вызывается entity_uri ().
$ http_response_code: (необязательно) Код состояния HTTP, используемый для перенаправления, по умолчанию равен 302. Допустимые значения для кодов состояния перенаправления 3xx определены в RFC 2616 и в черновике для новых кодов состояния HTTP:
301: Перемещено постоянно (рекомендуемое значение для большинства перенаправлений).
302: найдено (по умолчанию в Drupal и PHP, иногда используется для спам-поисковых систем).
303: см. Другое.
304: не модифицировано.
305: использовать прокси.
307: временное перенаправление.
Drupal 8
Drupal 8 удалил функцию drupal_goto , для перенаправления на внешний URL смотрите ответ на вопрос: Как мне перенаправить на внешний URL? ,