Jakiej funkcji API używam do przekierowywania na zewnętrzne adresy URL?

21

Pisząc moduł, używa się go do przekierowywania na ścieżki Drupala drupal_goto.

Czy jest jakaś funkcja API, której powinienem użyć do przekierowania na strony zewnętrzne? Albo jest ustawienie Locationsię drupal_set_headerdo zrobienia?

PS Muszę wykonać pewne przetwarzanie na żądanie; mod_rewrite/ mod_aliasna poziomie Apache lub Path redirectmodułu Drupal , nie rozwiązuj mojego problemu.

Chris Wesseling
źródło

Odpowiedzi:

25

Powinieneś użyć drupal_goto () do wewnętrznych i zewnętrznych przekierowań.

Użyj opcji „zewnętrzne” dla zewnętrznych przekierowań: drupal_goto($url, array('external' => TRUE));

drupal_goto ($ path = '', array $ options = array (), $ http_response_code = 302)

$ options: (opcjonalnie) Tablica asocjacyjna dodatkowych opcji z następującymi elementami:

  • „zapytanie” : tablica par klucz / wartość zapytania (bez kodowania adresu URL), które mają zostać dołączone do adresu URL.
  • „fragment” : identyfikator fragmentu (o nazwie kotwica), który dołącza się do adresu URL. Nie dołączaj wiodącej postaci „#”.
  • „bezwzględny” : Domyślnie ustawiony jest na FAŁSZ. Określa, czy wymusić wyjście jako bezwzględny link (zaczynający się od http :). Przydatny w przypadku linków, które będą wyświetlane poza witryną, na przykład w kanale RSS.
  • „alias” : domyślnie FALSE. Czy podana ścieżka jest już aliasem adresu URL.
  • „zewnętrzny” : czy dana ścieżka jest zewnętrznym adresem URL.
  • „język” : opcjonalny obiekt językowy. Jeśli ścieżka, do której prowadzi łącze, jest wewnętrzna dla witryny, $ options ['język'] służy do wyszukiwania aliasu dla adresu URL. Jeśli $ options ['język'] zostanie pominięty, zostanie użyta globalna $ language_url.
  • „https” : czy ten adres URL powinien wskazywać bezpieczną lokalizację. Jeśli nie jest zdefiniowany, używany jest bieżący schemat, więc użytkownik pozostaje odpowiednio na HTTP lub HTTPS. PRAWDA wymusza HTTPS, a FAŁSZ wymusza HTTP, ale HTTPS można wymusić tylko wtedy, gdy zmienna „https” jest ustawiona na PRAWDA.
  • „base_url” : Używany tylko wewnętrznie, aby zmodyfikować podstawowy adres URL, gdy wymaga tego URL zależny od języka.
  • „Prefiks” : Używany tylko wewnętrznie, aby zmodyfikować ścieżkę, gdy wymaga tego URL zależny od języka.
  • „skrypt” : nazwa pliku skryptu w katalogu głównym Drupala do użycia, gdy czyste adresy URL są wyłączone, takie jak „index.php”. Domyślnie jest to pusty ciąg, ponieważ większość współczesnych serwerów WWW automatycznie znajduje „index.php”. Jeśli czyste adresy URL są wyłączone, wartość $ path jest dodawana jako parametr zapytania „q” do $ options [„script”] w zwróconym adresie URL. Podczas wdrażania Drupala na serwerze internetowym, którego nie można skonfigurować do automatycznego wyszukiwania index.php, można zaimplementować hook_url_outbound_alter (), aby wymusić tę wartość na „index.php”.
  • „entity_type” : typ obiektu obiektu, który wywołał url (). Ustawiane tylko wtedy, gdy url () jest wywoływany przez entity_uri ().
  • „encja” : obiekt encji (taki jak węzeł), dla którego generowany jest adres URL. Ustawiane tylko wtedy, gdy url () jest wywoływany przez entity_uri ().

$ http_response_code: (opcjonalnie) Kod stanu HTTP używany do przekierowania, domyślnie wynosi 302. Prawidłowe wartości dla kodów stanu przekierowania 3xx są zdefiniowane w RFC 2616 i projekt nowych kodów stanu HTTP:

301: Przeniesiono na stałe (zalecana wartość dla większości przekierowań).

302: Znaleziono (domyślnie w Drupal i PHP, czasami używany do spamowania wyszukiwarek).

303: Zobacz inne.

304: Nie zmodyfikowano.

305: Użyj proxy.

307: Tymczasowe przekierowanie.

Drupal 8

Drupal 8 usunął funkcję drupal_goto , w celu przekierowania na zewnętrzny adres URL zapoznaj się z odpowiedzią na pytanie: Jak przekierować na zewnętrzny adres URL? .

sanzante
źródło
1
Bardzo dobra odpowiedź
OV
+1 tunika (i Nikhil M do edycji) Ta odpowiedź jest lepsza niż oficjalne dokumenty API: api.drupal.org/api/drupal/includes%21common.inc/function/… (w twojej odpowiedzi tablica opcji jest wyczerpująca opisane). +1 również Oleg do uznania.
therobyouknow,