J'essaie de rediriger toutes les requêtes vers mon domaine vers un autre domaine en utilisant mod_rewrite dans une déclaration Apache 2.2 VirtualHost. Il y a une exception à cela - Je voudrais que toutes les demandes au /audio
chemin pas à être redirigé.Règle mod_rewrite pour rediriger toutes les requêtes sauf pour un chemin spécifique
J'ai écrit un RewriteCond et RewriteRule pour le faire mais ce n'est pas tout à fait raison 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, cela 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 à:
RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net/(?!audio) [NC]
(c.-à-mettre la barre oblique en dehors de la partie préanalyse négative), il fonctionne, mais l'inconvénient est que les demandes à mydomain.net sans une barre oblique ne sera pas redirigé. Est-ce que quelqu'un peut signaler ce que je fais mal?
(Note: les crochets autour du domaine dans le bit RewriteRule ci-dessus sont ajoutées par StackOverflow.com - ils ne sont pas là dans le code réel)
Voici les règles:
<VirtualHost *:80>
ServerAdmin [email protected]
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 - qui fait sens parfait, mais il semble ne pas encore au travail.
Voici ce que le journal mod_rewrite dit quand je fais une demande de 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]
Depuis le REQUEST_URI ne démarre avec /audio
je me attends RewriteRule à être ignoré. Le HTTP_HOST contient uniquement le nom d'hôte, pas le chemin de l'URL demandée.
application modèle à uri '/ audio' On dirait qu'il traite un motif différent. Ou peut-être que la logique est juste en arrière maintenant. Pouvez-vous poster votre ensemble complet de règles? – mercutio