Till: mod_rewrite

Moin!

Ich versuche gerade eine 'rewrite rule' zu erstellen mit der ich meine Seite steuern will.
URL: http://example.net/1/2/3 zu /?eins=1&zwei=2&drei=3

Das ist auch ganz einfach:
RewriteRule ^(.*)/(.*)/(.*) /?eins=$1&zwei=$2&drei=$3

Ich möchte aber wenn 2 und 3 oder nur 3 nicht gegeben sind das 0 gesannt wird:

http://example.net/1
/?eins=$1&zwei=0&drei=0

http://example.net/1/2
/?eins=$1&zwei=2&drei=0

Kann mir jemand weiter helfen?

  1. hi,

    Kann mir jemand weiter helfen?

    wobei?

    du hast uns ja nicht einmal mitgeteilt, was an deinem vorhaben derzeit nicht klappt.

    gruss,
    wahsaga

    1. RewriteRule ^(.*)/(.*)/(.*) /?eins=$1&zwei=$2&drei=$3

      Klappt:
      http://example.net/1/2
      http://example.net/1/2/
      http://example.net/1/2/3

      Läuft nicht:
      http://example.net/1
      http://example.net/1/
      http://example.net/1/2/3/

      Ich hab null ahnung von regulären ausdrücken und mod_rewrite :-/

      mfg Till

      1. hi,

        RewriteRule ^(.*)/(.*)/(.*) /?eins=$1&zwei=$2&drei=$3

        Klappt:
        http://example.net/1/2

        wirklich?

        http://example.net/1/2/
        http://example.net/1/2/3

        Läuft nicht:
        http://example.net/1

        natürlich, darauf trifft deine bedingung ja auch nicht zu.

        http://example.net/1/

        dito.

        http://example.net/1/2/3/

        dito.

        m.E. brauchst du mehrere separate regeln für dein vorhaben.

        RewriteRule ^([0-9]*)/([0-9]*)/([0-9]*)/?$ /?eins=$1&zwei=$2&drei=$3
        RewriteRule ^([0-9]*)/([0-9]*)/?$ /?eins=$1&zwei=$2&drei=0
        RewriteRule ^([0-9]*)/?$ /?eins=$1&zwei=0&drei=0

        gruss,
        wahsaga

        1. p.s.:

          RewriteRule ^([0-9]*)/([0-9]*)/([0-9]*)/?$ /?eins=$1&zwei=$2&drei=$3
          RewriteRule ^([0-9]*)/([0-9]*)/?$ /?eins=$1&zwei=$2&drei=0
          RewriteRule ^([0-9]*)/?$ /?eins=$1&zwei=0&drei=0

          • statt * würde sich evtl. eher anbieten, da ja immer mind. eine ziffer gefunden werden soll:

          RewriteRule ^([0-9]+)/([0-9]+)/([0-9]+)/?$ /?eins=$1&zwei=$2&drei=$3
          RewriteRule ^([0-9]+)/([0-9]+)/?$ /?eins=$1&zwei=$2&drei=0
          RewriteRule ^([0-9]+)/?$ /?eins=$1&zwei=0&drei=0

          und kann evtl. auch sein, dass man /? noch durch (/?) ersetzen muss.

          gruss,
          wahsaga

          1. Moin!

            und kann evtl. auch sein, dass man /? noch durch (/?) ersetzen muss.

            Bedenke, dass die URL immer mit dem "/" am Anfang anfängt, nicht mit einer Zahl.

            - Sven Rautenberg

            --
            "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
            1. hi,

              und kann evtl. auch sein, dass man /? noch durch (/?) ersetzen muss.

              Bedenke, dass die URL immer mit dem "/" am Anfang anfängt, nicht mit einer Zahl.

              tut sie ja auch, bei meinen regeln.

              mit /? war der optionale trailing slash gemeint.

              gruss,
              wahsaga

              1. Moin!

                und kann evtl. auch sein, dass man /? noch durch (/?) ersetzen muss.

                Bedenke, dass die URL immer mit dem "/" am Anfang anfängt, nicht mit einer Zahl.

                tut sie ja auch, bei meinen regeln.

                Nein.

                RewriteRule ^([0-9]+)/([0-9]+)/([0-9]+)/?$ /?eins=$1&zwei=$2&drei=$3
                RewriteRule ^([0-9]+)/([0-9]+)/?$ /?eins=$1&zwei=$2&drei=0
                RewriteRule ^([0-9]+)/?$ /?eins=$1&zwei=0&drei=0

                mit /? war der optionale trailing slash gemeint.

                Das ist mir klar. Um den gehts hier aber nicht.

                - Sven Rautenberg

                --
                "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
                1. hi,

                  tut sie ja auch, bei meinen regeln.

                  Nein.

                  na sowas, hatte ich
                  RewriteBase /
                  etwa vergessen hinzuschreiben? *g*

                  hast natürlich recht.

                  gruss,
                  wahsaga

          2. Hallo,

            RewriteRule ^([0-9]+)/?$ /?eins=$1&zwei=0&drei=0

            ^
            Hat das Fragezeichen im Ersatz-Ausdruck (oder wie man den hinteren Teil auch immer nennt) eine besondere Bedeutung, oder ist es schlicht ein Tippfehler?

            Grüße, Alex.

            1. Hallo,

              Sorry, ich bin sooo blöd!
              Es geht ja um einen Query-String.
              (Bitte vorheriges Posting einfach vergessen!)

              Grüße, Alex.

              1. hi,

                Sorry, ich bin sooo blöd!
                Es geht ja um einen Query-String.
                (Bitte vorheriges Posting einfach vergessen!)

                trotzdem bringt mich dein einwand noch auf eine ergänzung:

                evtl. sollte man gleich auf den script-namen mit angeben, also
                /scriptname.php?eins=...
                verwenden statt
                /?eins=...

                andernfalls muss man sich darauf verlassen, dass das gewünschte script mit DirectoryIndex als default-script herangezogen wird.

                gruss,
                wahsaga

        2. Klasse das läuft wunderbar!

          Wie kann man es so gestalten das es egal ist ob
          http://example.net/1
          oder
          http://example.net/1/

          Irgentwie ^([a-z]*[/|NICHTS])$ ???

          RewriteRule ^([a-z]*)/$ /index.sxp?lang=$1&mode=0&js=0

          mfg Till

          PS: DirectoryIndex index.sxp

          1. Habs selber geschafft *freu*

            Falls es noch jemanden intressiert:

            RewriteRule ^((en|de|la)*)/((error|download|HTML|confirm|store|form|check)*)/js(/|\s*)$ /index.sxp?lang=$1&mode=$2&js=1
            RewriteRule ^((en|de|la)*)/((error|download|HTML|confirm|store|form|check)*)(/|\s*)$ /index.sxp?lang=$1&mode=$2&js=0
            RewriteRule ^((en|de|la)*)(/|\s*)$ /index.sxp?lang=$1&mode=0&js=0