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
-
Activer le Moteur de Réécriture : Tout d’abord, assurez-vous que le moteur de réécriture est activé.
RewriteEngine on
-
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
-
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 !