Bedingte Umleitung mittels .htaccess
Lucie
- htaccess
Hallo,
ich möchte alles auf test.test umleiten außer
/Bilder, /Bilder/ und /Bilder/.....
und
/Fotos, /Fotos/ und /Fotos/.....
Mit nachfolgendem .htaccess funktioniert es leider nicht.
Wo liegt der Fehler?
RewriteEngine On
RewriteCond %{REQUEST_URI} !(^/Bilder OR ^/Fotos) [NC]
RewriteRule ^ https://www.test.test/ [R=301,L]
Wenn ich in der Bedingung nur angebe
RewriteCond %{REQUEST_URI} !^/Bilder [NC]
funktioniert es.
Hi,
Mit nachfolgendem .htaccess funktioniert es leider nicht.
Wo liegt der Fehler?
Regexe kennen kein "OR".
RewriteEngine On RewriteCond %{REQUEST_URI} !(^/Bilder OR ^/Fotos) [NC] RewriteRule ^ https://www.test.test/ [R=301,L]
RewriteCond %{REQUEST_URI} !(^/Bilder|^/Fotos) [NC]
würde ich probieren.
cu,
Andreas a/k/a MudGuard
Hallo MudGuard,
um Lucie nicht zu verwirren:
Dein
!(^/Bilder|^/Fotos)
und mein
!(^/(Bilder|Fotos))
sind das Gleiche. Es wurde lediglich die Abfrage auf "Treffer ist am Anfang und beginnt mit /" vorgezogen. Ich mutmaße mal, dass wir uns beide auch noch Klammern sparen könnten:
!^/Bilder|^/Fotos
!^/(Bilder|Fotos)
Rolf
Hallo Lucie,
in der RewriteCond wird eine Regex ("regular expression") angegeben. Die Regex-Syntax ist nicht ganz einheitlich, es gibt unterschiedliche Regex-Engines, aber OR ist in keiner Engine Teil der Syntax.
Apache verwendet PCRE (Perl compatible regular expressions). Hier sind ein paar Beispiele aus dem Apache Handbuch für die verwendete Regex-Syntax und Links zu Dokumentationen. Wir haben auch im Selfhtml-Wiki einen Artikel zu Regex. Der bezieht sich zwar auf JavaScript, aber die JS-Regexe sind Perl-ähnlich.
Wenn Du ein "ODER" haben willst, musst Du den | Operator verwenden. D.h. mit
RewriteCond %{REQUEST_URI} !(^/(Bilder|Fotos)) [NC]
müsste es funktionieren. Das bedeutet "NICHT (Bilder oder Fotos)".
Alternativ kannst Du auch zwei Bedingungen formulieren, das könnte verständlicher sein.
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/Bilder [NC]
RewriteCond %{REQUEST_URI} !^/Fotos [NC]
RewriteRule ^ https://www.test.test/ [R=301,L]
RewriteConds sind UND-verknüpft, in dieser Formulierung steht da also "NICHT Bilder UND NICHT Fotos". Was nach den Gesetzen von de Morgan gleichbedeutend mit "NICHT (Bilder ODER Fotos)" ist.
Rolf