Lucie: Bedingte Umleitung mittels .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.

  1. 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

    1. 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

      --
      sumpsi - posui - obstruxi
  2. 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

    --
    sumpsi - posui - obstruxi
    1. Danke Euch!