Ich versuche, alle Anfragen an meine Domain zu einer anderen Domäne mit mod_rewrite in einer Apache 2.2 VirtualHost Deklaration umzuleiten. Es gibt eine Ausnahme - ich möchte alle Anfragen an den /audio
Pfad nicht umgeleitet werden.mod_rewrite Regel zum Umleiten aller Anfragen mit Ausnahme eines bestimmten Pfades
Ich habe eine RewriteCond und RewriteRule geschrieben, um dies zu tun, aber es ist nicht ganz richtig und ich kann nicht herausfinden, warum. Der reguläre Ausdruck enthält einen negativen Lookahead für die Zeichenfolge "/ audio", aber aus irgendeinem Grund stimmt dies nicht überein. Hier ist die Definition:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net(?!/audio) [NC]
RewriteRule ^(.*)$ http://www.newdomain.net [L,R=301]
Wenn ich die RewriteCond zu ändern:
RewriteCond %{HTTP_HOST} ^(.*\.)?mydomain\.net/(?!audio) [NC]
(dh setzen Sie den Schrägstrich außerhalb des negativen Look-Ahead-Teil), dann funktioniert es, aber die Kehrseite der Medaille ist, dass Anfragen zu mydomain.net ohne einen abschließenden Schrägstrich wird nicht umgeleitet.
Kann jemand darauf hinweisen, was ich falsch mache?
(Hinweis: die spitzen Klammern um die Domäne in der RewriteRule Bit durch StackOverflow.com oben hinzugefügt werden - sie sind dort nicht in den eigentlichen Code)
Hier sind die Regeln:
<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>
Dank @mercutio -, die durchaus Sinn macht, aber es scheint immer noch nicht zu funktionieren.
Hier ist, was das mod_rewrite Protokoll sagt, wenn ich eine Anfrage an http://mydomain.net/audio/something.mp3 machen:
(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]
Da die REQUEST_URI mit /audio
läuft würde ich die RewriteRule ignoriert werden erwartet.
Muster Anwendung zu uri '/ audio' Klingt, als ob es ein anderes Muster verarbeitet. Oder vielleicht ist die Logik jetzt gerade umgekehrt. Können Sie Ihre vollständigen Regeln veröffentlichen? – mercutio