J'essaie de rediriger toutes les requêtes vers mon domaine vers un autre domaine en utilisant mod_rewrite dans une déclaration de VirtualHost Apache 2.2. Il y a une exception à cette règle : j'aimerais que toutes les requêtes vers le domaine /audio
chemin no pour être redirigé.
J'ai écrit un RewriteCond et un RewriteRule pour faire cela mais ce n'est pas tout à fait correct et je n'arrive pas à comprendre pourquoi. L'expression régulière contient un lookahead négatif pour la chaîne "/audio", mais pour une raison quelconque, elle ne correspond pas. Voici la définition :
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net(?!/audio) [NC]
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]
Si je change le RewriteCond en :
RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net/(?!audio) [NC]
(c'est-à-dire en plaçant la barre oblique à l'extérieur de la partie négative du lookahead), cela fonctionne, mais l'inconvénient est que les requêtes vers mydomain.net sans barre oblique de fin ne seront pas redirigées.
Quelqu'un peut-il m'indiquer ce que je fais mal ?
(Remarque : les crochets autour du domaine dans la règle de réécriture ci-dessus sont ajoutés par StackOverflow.com - ils ne figurent pas dans le code réel).
Voici les règles :
<VirtualHost *:80>
ServerAdmin me@mydomain.net
DocumentRoot "/var/www/mydomain.net/htdocs"
ServerName www.mydomain.net
ServerAlias mydomain.net
RewriteEngine on
RewriteCond {REQUEST_URI} !^/audio
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]
RewriteLog logs/mod_rewrite_log
RewriteLogLevel 3
ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>
Merci @mercutio -- c'est tout à fait logique mais cela ne semble toujours pas fonctionner.
Voici ce que dit le journal du mod_rewrite lorsque je fais une demande à http://mydomain.net/audio/something.mp3 :
(2) init rewrite engine with requested uri /audio/something.mp3
(3) applying pattern '^(.*)$' to uri '/audio'
(2) rewrite '/audio' -> 'http://www.newdomain.net/'
(2) explicitly forcing redirect with http://www.newdomain.net
(1) escaping http://www.newdomain.net for redirect
(1) redirect to http://www.newdomain.net [REDIRECT/301]
Puisque le REQUEST_URI commence avec /audio
Je m'attendrais à ce que la RewriteRule soit ignorée.