Comment effectuer une redirection interne avec mod_rewrite dans Apache

Comment effectuer une redirection interne avec mod_rewrite dans Apache

Dans cet article et dans le prochain, nous expliquerons comment utiliser MOD_Rewrite, pour cartographier certaines demandes HTTP à d'autres pages d'un site Web ou à une URL externe.

En d'autres termes, ce module Apache bien connu vous permettra de rediriger une URL vers une autre, que nous illustrons à travers des exemples pratiques.

Lire suggérée: 5 conseils pour augmenter les performances de votre serveur Web Apache

NOTE: Les exemples ci-dessous supposent que vous êtes au moins un peu familier avec Expressions régulières compatibles Perl (PCRE). Puisque ce sujet est hors de l'étendue de cet article, reportez-vous à la version 24 Perl 5.0 Docs pour plus de détails sur PCRE.

Avant de continuer, assurez-vous que le module de réécriture est chargé. Bien que ce soit le comportement par défaut dans Centos et des distributions similaires, dans Debian et des dérivés, vous devrez le charger manuellement comme suit:

# A2enmod réécriture 

Configuration d'Apache pour utiliser le module mod_rewrite

Pour plus de simplicité, utilisons le site par défaut dans un Centos 7 boîte (IP 192.168.0.100) pour expliquer comment utiliser mod_rewrite (Document de document: / var / www / html, fichier de configuration: / etc / httpd / conf / httpd.confli).

Pour qu'Apache utilise ce module, ajoutez la ligne suivante au fichier de configuration:

Réécrire 

Il est important de noter que cette configuration ne sera pas héritée par les hôtes virtuels dans la même boîte.

Ainsi, vous devrez ajouter Réécriture sur chaque hôte virtuel où vous souhaitez utiliser les règles de réécriture.

Redirection interne: mappage d'une URL vers un autre dans le même hôte virtuel

Une redirection interne est l'exemple le plus simple de mod_rewrite. Si vous souhaitez rediriger toutes les demandes pour défaut.aspx pour indice.html, Ajouter la ligne suivante (également connue sous le nom de règle de réécriture) sous Réécriture sur:

Réécriture "^ / par défaut \.aspx $ "" / index.html " 

Et n'oubliez pas de redémarrer Apache pour que les changements prennent effet.

Cela peut être utile si votre site a été conçu à l'origine en utilisant ASPIC et plus tard changé en plaine Html5. Les moteurs de recherche auront le .aspx Fichier indexé mais ce fichier n'existe plus.

Dans ce cas, vous devrez trouver un moyen de rediriger la demande afin que vos visiteurs potentiels ne se heurtent pas à une page d'erreur. Pour tester, créons un simple fichier html nommé indice.html à l'intérieur / var / www / html avec le contenu suivant:

    Nouveau site   

Défaut.ASPX était là, mais maintenant c'est l'index.html

Le grimper et dollar Les signes entraîneront l'expression régulière pour correspondre à toute chaîne commençant avec /défaut et se terminant avec .aspx, respectivement.

Lire suggérée: Installez mod_pagespeed pour accélérer les performances Apache jusqu'à 10x

Maintenant, lancez votre navigateur et pointez-le vers 192.168.0.100 / par défaut.aspx. Si les choses se passent comme prévu, Apache devrait servir indice.html plutôt.
Cependant, l'utilisateur final verra toujours défaut.aspx Dans la barre d'adresse, ce qui fait que le changement est totalement transparent:

Mappage URL vers une autre page sur le domaine

Si vous voulez que l'URL dans la barre d'adresse montre que le serveur qu'il sert réellement indice.html au lieu d'une page nommée défaut.aspx, ajouter [R, l] à la fin de la règle de réécriture comme suit:

Réécriture "^ / par défaut \.aspx $ "" / index.html "[r, l] 

Ici [R, l] sont deux indicateurs facultatifs qui indiquent qu'une redirection HTTP complète doit être émise au navigateur (R) et qu'aucune autre règle ne doit être traitée:

URL de mappage vers la page d'index réelle

Notez comment la barre d'adresses montre maintenant indice.html, Comme prévu, au lieu de défaut.aspx Comme il l'a fait plus tôt.

Résumé

Dans cet article, nous avons expliqué comment utiliser mod_rewrite pour effectuer une redirection interne. Restez à l'écoute pour le prochain article où nous apprendrons comment rediriger vers une ressource qui a été déplacée vers un autre serveur et comment afficher le contenu personnalisé en fonction du navigateur de l'utilisateur. Jusque-là, reportez-vous à l'Apache 2.4 documents pour une liste complète des drapeaux de réécriture disponibles.

Comme toujours, n'hésitez pas à utiliser le formulaire de commentaire ci-dessous si vous avez des questions ou des commentaires sur cet article. Nous avons hâte d'avoir de tes nouvelles!