Quelle fonction d'API dois-je utiliser pour rediriger vers des URL externes?

21

Lors de l'écriture d'un module, pour la redirection vers des chemins Drupal, on utilise drupal_goto.

Existe-t-il une fonction API que je devrais utiliser pour rediriger vers des pages externes? Ou est-ce Locationque c'est drupal_set_headerla voie à suivre?

PS je dois faire un peu de traitement à la demande; mod_rewrite/ mod_aliasau niveau Apache ou le Path redirectmodule Drupal , ne résout pas mon problème.

Chris Wesseling
la source

Réponses:

25

Vous devez utiliser drupal_goto () pour les redirections internes et externes.

Utilisez l'option «externe» pour les redirections externes: drupal_goto($url, array('external' => TRUE));

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

$ options: (facultatif) Un tableau associatif d'options supplémentaires, avec les éléments suivants:

  • «requête» : un tableau de paires clé / valeur de requête (sans encodage d'URL) à ajouter à l'URL.
  • 'fragment' : identifiant de fragment (nommé ancre) à ajouter à l'URL. N'incluez pas le premier caractère «#».
  • 'absolu' : par défaut FAUX. Indique si la sortie doit être un lien absolu (commençant par http :). Utile pour les liens qui seront affichés en dehors du site, comme dans un flux RSS.
  • 'alias' : par défaut FALSE. Si le chemin donné est déjà un alias d'URL.
  • 'externe' : Indique si le chemin donné est une URL externe.
  • 'language' : Un objet langage facultatif. Si le chemin auquel est lié est interne au site, $ options ['langue'] est utilisé pour rechercher l'alias de l'URL. Si $ options ['language'] est omis, le $ language_url global sera utilisé.
  • 'https' : indique si cette URL doit pointer vers un emplacement sécurisé. S'il n'est pas défini, le schéma actuel est utilisé, donc l'utilisateur reste respectivement sur HTTP ou HTTPS. TRUE applique HTTPS et FALSE applique HTTP, mais HTTPS ne peut être appliqué que lorsque la variable 'https' est définie sur TRUE.
  • 'base_url' : utilisé uniquement en interne, pour modifier l'URL de base lorsqu'une URL dépendante de la langue le requiert.
  • 'préfixe' : utilisé uniquement en interne, pour modifier le chemin lorsqu'une URL dépendante de la langue le requiert.
  • 'script' : Le nom de fichier du script dans le répertoire racine de Drupal à utiliser lorsque les URL propres sont désactivées, comme 'index.php'. Par défaut, une chaîne vide, car la plupart des serveurs Web modernes trouvent automatiquement «index.php». Si les URL propres sont désactivées, la valeur de $ path est ajoutée en tant que paramètre de requête «q» à $ options [«script»] dans l'URL renvoyée. Lors du déploiement de Drupal sur un serveur Web qui ne peut pas être configuré pour trouver automatiquement index.php, hook_url_outbound_alter () peut être implémenté pour forcer cette valeur à 'index.php'.
  • 'entity_type' : Le type d'entité de l'objet qui a appelé url (). Défini uniquement si url () est invoqué par entity_uri ().
  • «entité» : l'objet entité (tel qu'un nœud) pour lequel l'URL est générée. Défini uniquement si url () est invoqué par entity_uri ().

$ http_response_code: (facultatif) Le code d'état HTTP à utiliser pour la redirection, par défaut 302. Les valeurs valides pour les codes d'état de redirection 3xx sont définies dans la RFC 2616 et le brouillon pour les nouveaux codes d'état HTTP:

301: Déplacé de façon permanente (la valeur recommandée pour la plupart des redirections).

302: Trouvé (par défaut dans Drupal et PHP, parfois utilisé pour les moteurs de recherche de spam).

303: Voir Autre.

304: Non modifié.

305: utilisez un proxy.

307: Redirection temporaire.

Drupal 8

Drupal 8 a supprimé la fonction drupal_goto , pour la redirection vers une URL externe, consultez cette réponse à la question: comment rediriger vers une URL externe? .

sanzante
la source
1
Très bonne réponse
OV
+1 tunique (et Nikhil M pour l'entrée de modification) Cette réponse est meilleure que les documents officiels de l'API: api.drupal.org/api/drupal/includes%21common.inc/function/… (dans votre réponse, le tableau d'options est globalement décrit). +1 également Oleg pour la reconnaissance.
therobyouknow