ebody: htaccess Cookie Prüfung, dann Weiterleitungen

Hallo,

bei jedem Besucher möchte ich prüfen, ob er bereits sein Einverständnis bzgl. Cookies u.a. gegeben hat oder nicht und das bevor HTML, JS Code u.a. geladen werden kann. Daher möchte ich per htaccess prüfen, ob der entsprechende Cookie mit dem Wert "yes" bereits gesetzt wurde oder nicht.

Wenn nicht, soll auf eine spezielle Seite weitergeleitet werden, es sei denn der Nutzer befindet sich auf der Datenschutz- oder Impressumsseite.

Das wäre die einfache Variante, ohne dass die Datenschutz- und Impressumsseite berücksichtigt werden.

RewriteEngine On
RewriteCond %{HTTP_COOKIE} !^cookieconsent_dismissed=yes$; [NC]
RewriteRule ^ https://www.domainname.com/info.html [R=302,L]

Das verursacht allerdings eine Endlosschleife an Weiterleitungen, daher müsste die Bedingung kombiniert werden:

Wenn du nicht auf der Seite info.html bist und cookieconsent_dismissed=yes nicht "existiert", dann leite auf info.html weiter.

So etwas wie [AND] scheint es aber nicht zu geben oder? Ich konnte zumindest nichts finden. Denn ich möchte die Bedingungen ja noch erweitern um die Seiten Datenschutz und Impressum.

RewriteEngine On
RewriteCond %{REQUEST_URI} !^info.html$ [OR]
RewriteCond %{REQUEST_URI} !^datenschutz.html$ [OR]
RewriteCond %{REQUEST_URI} !^impressum.html$ [OR]
RewriteCond %{HTTP_COOKIE} !^cookieconsent_dismissed=yes$; [NC]
RewriteRule ^ https://www.domainname.com/info.html [R=302,L]

Hier besteht weiterhin die Endlosschleife an Weiterleitungen. Wenn ich mich auf datenschutz.html befinde, werde ich auch weitergeleitet, was nicht sein soll.

Wie kann ich die Bedingungen kombinieren?

Gruß ebody

  1. Hallo ebody,

    RewriteRule ^ https://www.domainname.com/info.html [R=302,L]
    

    Keine Antwort auf deine Frage:

    Verwende für Beispieldomains die dafür vorgesehenen, z. B. example.com und keine die möglicherweise wirklich existiert. (oder bist du tatsächlich der Inhaber von domainname.com?)

    Bis demnächst
    Matthias

    --
    Rosen sind rot.
  2. Tach!

    So etwas wie [AND] scheint es aber nicht zu geben oder?

    Die RewriteConds werden AND-verknüpft, wenn man das [OR] weglässt.

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^info.html$ [OR]
    RewriteCond %{REQUEST_URI} !^datenschutz.html$ [OR]
    RewriteCond %{REQUEST_URI} !^impressum.html$ [OR]
    RewriteCond %{HTTP_COOKIE} !^cookieconsent_dismissed=yes$; [NC]
    RewriteRule ^ https://www.domainname.com/info.html [R=302,L]
    

    Hier besteht weiterhin die Endlosschleife an Weiterleitungen. Wenn ich mich auf datenschutz.html befinde, werde ich auch weitergeleitet, was nicht sein soll.

    Fängt die Request-URI denn relativ an, also ohne /? Das würde mich wundern, denn der Server weiß ja nicht, worauf es zu beziehen ist.

    dedlfix.

    1. Hallo,

      ja, der / fehlte zu Beginn.

      So hat es funktioniert...

      RewriteEngine On
      RewriteCond %{REQUEST_URI} !^/info.html$
      RewriteCond %{REQUEST_URI} !^/datenschutz.html$
      RewriteCond %{REQUEST_URI} !^/impressum.html$
      RewriteCond %{HTTP_COOKIE} !^cookieconsent_dismissed=yes$; [NC]
      RewriteRule ^ https://www.example.com/info.html [R=302,L]
      

      ...allerdings werden so CSS Dateien u.a. noch weitergeleitet und man müsste dies bzgl. die Anweisungen noch anpassen.

      Gruß ebody

      Gruß ebody

      1. Tach!

        ...allerdings werden so CSS Dateien u.a. noch weitergeleitet und man müsste dies bzgl. die Anweisungen noch anpassen.

        Ja, das ist ein generelles Problem, das man üblicherweise durch das Ausschließen von existierenden Dateien und Verzeichnissen löst. Zum Beispiel so:

        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        

        Das könnte sich aber mit deinen Bedingungen für die HTML-Dateien beißen.

        dedlfix.

  3. hallo

    cookieconsent_dismissed=yes

    Wie jetzt... Ich bekomme ein Cookie in der Frage ob ich Cookies akzeptiere?

    1. Hi,

      nein, es wird erstmal kein Cookie gesetzt. Nur geprüft, ob ein spezieller Cookie schon existiert.

      Gruß ebody

  4. Moin,

    Deine Logik: Beim 1. Request ist kein Cookie, Dialogbox wird gezeigt. Kunde klickt ja und die Seite wird neu geladen. Kunde freut sich. Dein Serverlog auch. Nun ist der Keks im Request, da sollte der Dialog nicht mehr gezeigt werden.

    Also, für mich hört sich das so an als wäre das keine Sache für die Serverkonfiguration weil es zum if mindestens ein else gibt. Dokumentiere das mal als Struktogram.

    MfG

    1. Hi,

      wenn der entsprechende Cookie schon gesetzt ist, wird der Nutzer nicht zur Bestätigungsseite inkl. Diaologbox weitergeleitet, sondern bleibt auf der "original Seite". Das wäre in dem Fall das ELSE. Oder habe ich was übersehen?

      Eine Serverseitige Lösung möchte ich zudem verwenden, damit ich Suchmaschinenbots noch von der Prüfung ausschließen kann, weil sie sonst die "echten" Seiten nicht finden, crawlen und rendern könnten.

      Das ist zwar Cloaking, aber denke in diesem Fall keines was Google als Manipulation wertet. Evtl. bekommen auch "nur" EU Nutzer das Dialogfeld und alle anderen Nutzer wie aus den USA, wo auch der Googlebot zugehört, würden sofort die richtigen Seiten erhalten. Aber das ist ja auch schon wieder ein anderes Thema...

      Gruß ebody

      1. Hi,

        wenn der entsprechende Cookie schon gesetzt ist, wird der Nutzer nicht zur Bestätigungsseite inkl. Diaologbox weitergeleitet, sondern bleibt auf der "original Seite". Das wäre in dem Fall das ELSE. Oder habe ich was übersehen?

        Es gibt sicher mehr als nur ein else. Das 1. else ist wenn der Besucher nein sagt. Und wenn er auf ja klickt, käme die nächste Verzweigung, nämlich dann wenn der Browser keinen Cookie schickt.

        Und nicht vergessen, dazwischen liegt jedesmal ein Request/Response~Zyklus.

        MfG