Какую функцию API я использую для перенаправления на внешние URL-адреса?

21

При написании модуля для перенаправления на пути к Drupal используется один drupal_goto.

Есть ли какая-нибудь функция API, которую я должен использовать для перенаправления на внешние страницы? Или это установка Locationс drupal_set_headerпути?

PS Я должен сделать некоторую обработку по запросу; mod_rewrite/ mod_aliasна уровне Apache или Path redirectмодуле Drupal , не решайте мою проблему.

Крис Весселинг
источник

Ответы:

25

Вы должны использовать 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? ,

sanzante
источник
1
Очень хороший ответ
OV
+1 туника (и Nikhil M для редактирования ввода) Этот ответ лучше, чем официальные документы API: api.drupal.org/api/drupal/includes%21common.inc/function/… (в вашем ответе массив опций является всеобъемлющим описано). +1 тоже Олег за признание.
therobyouknow