Maîtriser la Redirection avec mod_rewrite dans Apache

Si vous gérez un site web qui nécessite de rediriger le trafic d’un domaine vers un autre tout en préservant l’accès à certains chemins, mod_rewrite dans Apache peut être votre meilleur allié. Dans cet article, nous allons aborder comment rediriger toutes les demandes sauf une chemin spécifique, comme /audio, en utilisant mod_rewrite.

Le Problème

De nombreux webmasters se retrouvent dans une situation où ils doivent rediriger le trafic vers un nouveau domaine, mais souhaitent autoriser certaines demandes à passer sans changement. Par exemple, si vous passez de mydomain.example à newdomain.example et que vous souhaitez que tout le trafic soit redirigé sauf les demandes pour /audio, c’est là que mod_rewrite entre en jeu.

Problèmes de Syntaxe Courants

La tentative initiale d’un utilisateur pour configurer la redirection incluait une utilisation complexe des expressions régulières et des conditions avancées. Bien que l’intention était correcte, l’utilisation de HTTP_HOST dans RewriteCond était mal orientée car elle n’inclut pas le chemin de la demande.

La Solution

Pour réaliser la redirection désirée tout en permettant l’accès au chemin /audio, votre configuration Apache devrait être ajustée comme suit :

Configuration Étape par Étape

  1. Activer le Moteur de Réécriture : Tout d’abord, assurez-vous que le moteur de réécriture est activé.

    RewriteEngine on
    
  2. Configurer la Condition : Utilisez la variable REQUEST_URI pour vérifier si la demande n’est PAS pour le chemin /audio.

    RewriteCond %{REQUEST_URI} !^/audio
    
  3. Définir la Règle de Réécriture : Créez une règle qui gère la redirection vers le nouveau domaine.

    RewriteRule ^(.*)$ http://www.newdomain.example [L,R=301]
    

Mettre Tout Ensemble

Dans votre configuration VirtualHost, cela devrait ressembler à quelque chose comme ceci :

<VirtualHost *:80>
    ServerAdmin me@mydomain.example
    DocumentRoot "/var/www/mydomain.example/htdocs"
    ServerName www.mydomain.example
    ServerAlias mydomain.example

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/audio
    RewriteRule ^(.*)$ http://www.newdomain.example [L,R=301]

    RewriteLog /path/to/log/file
    RewriteLogLevel 3

    ErrorLog logs/error_log
    CustomLog logs/access_log common
</VirtualHost>

Déboguer Votre Configuration

Si vous rencontrez encore des problèmes après cette configuration, envisagez d’activer la journalisation pour voir les conditions et les règles en action :

  • Utilisez RewriteLog pour spécifier un fichier journal et régler le niveau de journalisation suffisamment haut pour capturer les détails pertinents.
RewriteLog /path/to/log/file
RewriteLogLevel 3

Comprendre les Journaux

Lorsque vous vérifiez les journaux après avoir mis en œuvre les règles ci-dessus, assurez-vous que les demandes à /audio ne touchent PAS la règle de réécriture.

Conclusion

Configurer la redirection d’URL en utilisant mod_rewrite est un moyen puissant de gérer le trafic tout en veillant à ce que certains chemins restent accessibles. En vous concentrant sur la configuration correcte et en comprenant le comportement de REQUEST_URI, vous pouvez résoudre efficacement les problèmes liés aux redirections indésirables.

Avec ces conseils, vous êtes désormais équipé pour gérer les redirections d’URL dans Apache en toute confiance. Bon codage !