Яку функцію 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 = '', масив $ options = array (), $ http_response_code = 302)

$ options: (необов'язково) Асоціативний масив додаткових опцій із такими елементами:

  • 'query' : масив пар запитів ключ / значення (без будь-якого кодування URL) для додавання до URL-адреси.
  • 'фрагмент' : ідентифікатор фрагмента (названий якорем) для додавання до URL-адреси. Не включайте провідний символ "#".
  • 'абсолютний' : за замовчуванням FALSE. Чи потрібно змушувати вихід бути абсолютною ланкою (починаючи з http :). Корисно для посилань, які відображатимуться поза сайтом, наприклад у RSS-стрічці.
  • "псевдонім" : за замовчуванням FALSE. Чи вже вказаний шлях є псевдонімом URL-адреси.
  • 'зовнішній' : чи вказаний шлях є зовнішньою URL-адресою.
  • 'мова' : необов'язковий мовний об'єкт. Якщо шлях, з яким пов’язано, є внутрішнім для сайту, для пошуку псевдоніма URL-адреси використовується $ options ['language']. Якщо параметри $ options ['language'] опущені, буде використаний глобальний $ language_url.
  • "https" : чи повинна вказати ця URL-адреса на безпечне місцеположення. Якщо це не визначено, використовується поточна схема, тож користувач залишається на HTTP або HTTPS відповідно. TRUE примушує HTTPS, а FALSE примушує HTTP, але HTTPS може бути застосовано лише тоді, коли для змінної 'https' встановлено значення TRUE.
  • 'base_url' : використовується лише внутрішньо, щоб змінити базову URL-адресу, коли цього вимагає URL-адреса, залежна від мови.
  • 'префікс' : використовується лише внутрішньо, щоб змінити шлях, коли цього вимагає URL-адреса, залежна від мови.
  • 'script' : ім'я файлу сценарію в кореневому каталозі Drupal, яке використовується, коли чисті URL-адреси відключені, наприклад 'index.php'. За замовчуванням використовується порожня рядок, оскільки більшість сучасних веб-серверів автоматично знаходять "index.php". Якщо чисті URL-адреси відключені, значення $ path додається як параметр запиту 'q' до $ options ['script'] у поверненій URL-адресі. Під час розгортання Drupal на веб-сервері, який не може бути налаштовано для автоматичного пошуку index.php, тоді гак_url_outbound_alter () може бути реалізований для примушення цього значення до "index.php".
  • 'type_type' : тип сутності об'єкта, який викликав url (). Встановлюється лише в тому випадку, якщо URL-адреса () викликається суттю_uri ().
  • 'сутність' : об'єкт сутності (наприклад, вузол), для якого створюється URL-адреса. Встановлюється лише в тому випадку, якщо URL-адреса () викликається суттю_uri ().

$ http_response_code: (необов’язково) Код статусу HTTP, який використовується для перенаправлення, за замовчуванням до 302. Дійсні значення для кодів статусу переадресації 3xx визначені в RFC 2616 та чернетка нових кодів HTTP-статусу:

301: переміщено постійно (рекомендоване значення для більшості переадресацій).

302: Знайдено (за замовчуванням в Drupal та PHP, іноді використовується для пошукових систем спаму).

303: Див. Інше.

304: Не змінено.

305: Використовуйте проксі.

307: Тимчасовий перенаправлення.

Друпал 8

Drupal 8 видалив функцію drupal_goto , для перенаправлення на зовнішню URL-адресу дивіться цю відповідь на питання: Як мені переадресувати на зовнішню URL-адресу? .


1
Дуже хороша відповідь
OV

Туніка +1 (і Nikhil M для редагування даних) Ця відповідь краще, ніж офіційні документи API: api.drupal.org/api/drupal/includes%21common.inc/function/… (у Вашій відповіді масив параметрів є всебічно описано). +1 також Олег за визнання.
therobyouknow
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.