web-dev-qa-db-fra.com

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

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

Existe-t-il une fonction API que je devrais utiliser pour rediriger vers des pages externes? Ou définit le Location avec drupal_set_header le chemin à parcourir?

PS Je dois faire un peu de traitement à la demande; mod_rewrite/mod_alias au niveau Apache ou Drupal Path redirect module, ne résout pas mon problème.

20
Chris Wesseling

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:

  • 'query' : Un tableau de paires clé/valeur de requête (sans encodage d'URL) à ajouter à l'URL.
  • 'fragment' : Un 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.
  • 'external' : Indique si le chemin donné est une URL externe.
  • 'language' : Un objet langage optionnel. Si le chemin auquel est lié est interne au site, $ options ['language'] 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' : uniquement utilisé en interne, pour modifier l'URL de base lorsqu'une URL dépendante de la langue l'exige.
  • 'préfixe' : uniquement utilisé 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, alors 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 RFC 2616 et le projet pour les nouveaux codes de statut 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 spammer les moteurs de recherche).

303: Voir Autre.

304: Non modifié.

305: utilisez un proxy.

307: Redirection temporaire.

Drupal 8

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

25
sanzante