dave: mod_rewrite Frage

Hallo,

Wie löse ich folgende Problemstellung:

Wenn eine Url eingegeben wird, die keinen Slash am Ende hat, und keinen Doppelpunkt beinhaltet, soll ein Slash am Ende hinzugefügt werden.
Enthält die eingegebene Url jedoch einen Doppelpunkt so soll kein Slash hinzugefügt werden.

zB:
www.domain.de/test  -> www.domain.de/test/  //Slash hinzufügen
www.domain.de/test:tmp -> www.domain.de/test:tmp  //keinen Slash hinzufügen

Wie ich zu jeder Url, die nicht mit einem Slash endet, einen hinzufüge ist mir klar:

rewriteCond $1 !/$
rewriteRule ^([^.]+)$ /$1/ [R=301,L]

Jedoch weiß ich nicht, wie ich eine zusätzliche Bedinungen UND !: hinzufüge.

Vielen Dank für eure Hilfe
lg

  1. hi,

    Jedoch weiß ich nicht, wie ich eine zusätzliche Bedinungen UND !: hinzufüge.

    Du willst als letztes Zeichen genau eines aus der Zeichenklasse fordern, die alles ausser dem Doppelpunkt enthält.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi,

      Du willst als letztes Zeichen genau eines aus der Zeichenklasse fordern, die alles ausser dem Doppelpunkt enthält.

      Sorry, nein, sollte ja nicht am Ende stehen müssen.

      Dann willst du also deine Zeichenklasse so gestalten, dass sie alles ausser dem Doppelpunkt (und ggf. noch Slash?) enthalten darf.

      Btw: Warum nutzt du derzeit eigentlich [^.], funktioniert das etwa - "alles ausser JedesBeliebigeZeichen" ...?

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Hallo,

        Btw: Warum nutzt du derzeit eigentlich [^.], funktioniert das etwa - "alles ausser JedesBeliebigeZeichen" ...?

        Ich dachte ^([^.]+)$ bedeutet: Ein oder beliebig viele Zeichen außer Punkt.

        Es geht mir aber vielmehr um die Bedingung: rewriteCond $1 !/$
        Denn die Regel tritt ja nur in Kraft, wenn $1 nicht mit einem Slash endet.
        Daher müsste man die Bedingung eigentlich so formulieren:
        rewriteCond $1 !/ && !: $
        Jedoch ist diese Syntax nicht korrekt.

        1. Moin,

          Daher müsste man die Bedingung eigentlich so formulieren:
          rewriteCond $1 !/ && !: $
          Jedoch ist diese Syntax nicht korrekt.

          Ich meine so etwas sollte gehen:

          RewriteCond %{foo} [OR] bzw [AND]
          RewriteCond %{bar}

          um mehrere Bedingungen logisch zu verknüpfen. Ist nicht so ganz PHP kompatibel.

          mit freundlichen Grüßen
          Ulrich

          --
          Teiltransparente Bereiche
          selfcode: sh:| br:> ie:% mo:) va:) de:] zu:) fl:( ss:| ls:[
          um-fritz.de
          1. Hallo,

            RewriteCond %{foo} [OR] bzw [AND]
            RewriteCond %{bar}

            Leider erhalte ich hierbei einen Internal Server Error.

            Grüße
            dave

            1. Moin,

              Sorry, mein Fehler. Scheint OR geht, aber AND nicht.
              Schau mal in der Doku, vielleicht findest Du noch was.

              http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

              mit freundlichen Grüßen
              Ulrich

              --
              Teiltransparente Bereiche
              selfcode: sh:| br:> ie:% mo:) va:) de:] zu:) fl:( ss:| ls:[
              um-fritz.de
              1. gudn tach!

                Sorry, mein Fehler. Scheint OR geht, aber AND nicht.
                Schau mal in der Doku, vielleicht findest Du noch was.

                http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

                AND wird immer implizit angenommen (wenn nicht durch [OR] explizit was anderes gesagt wird)

                also wohl einfach

                RewriteCond %{REQUEST_URI} !:
                  RewriteCond %{REQUEST_URI} !/$

                prost
                seth

                1. Prost seth,

                  RewriteCond %{REQUEST_URI} !:
                  RewriteCond %{REQUEST_URI} !/$

                  Funktioniert perfekt.
                  Vielen, vielen Dank.

                  a te santé...
                  dave

                  1. gudn tach!

                    RewriteCond %{REQUEST_URI} !:
                    RewriteCond %{REQUEST_URI} !/$

                    alternativ waere es uebrigens auch in einer abfrage moeglich:

                    RewriteCond %{REQUEST_URI} !(:|/$)
                      (ob die klammer notwendig ist, weiss ich nicht)

                    oder nicht-negiert

                    RewriteCond %{REQUEST_URI} [1]+[^/:]$

                    prost
                    seth


                    1. ^: ↩︎