Albert: mod_rewrite

Hallo,

Wie man mit mod_rewrite (variable) Zahlen ersetzt, hab ich bereits im Web gefunden:

RewriteRule ^seite_([0-9]+).html$ seite.php?id=$1
... gibt bei Eingabe von seite_2.html in Wirklichkeit seite.php?id=2 aus

Wie kann ich aber die Variable nicht als Zahl, sondern als String definieren?

Ich möchte in meinem konkreten Fall bei der Eingabe von www.meinedomain.at/gaestebuch in Wirklichkeit die Datei www.meinedomain.at/index.php?cat=gaestebuch aufrufen.

Wie geht das?
mfg Albert

  1. Hallo Freunde des gehobenen Forumsgenusses,

    Ich möchte in meinem konkreten Fall bei der Eingabe von www.meinedomain.at/gaestebuch in Wirklichkeit die Datei www.meinedomain.at/index.php?cat=gaestebuch aufrufen.

    Ungetestet:
    RewriteRule [1]+ index.php?cat=$1

    Siehe auch SELFHTML: Perl / Perl-Sprachelemente / Reguläre Ausdrücke

    Gruß
    Alexander Brock

    --
    [latex]\lim_{3 \to 4}{\sqrt{3}} = 2[/latex]

    1. a-zA-Z ↩︎

    1. Ungetestet:
      RewriteRule [1]+ index.php?cat=$1

      Das funktioniert leider nicht.

      Und der Link sagt mir zunächst mal überhaupt nix, weil ich noch nie etwas damit zu tun hatte.


      1. a-zA-Z ↩︎

      1. Hallo Freunde des gehobenen Forumsgenusses,

        RewriteRule [1]+ index.php?cat=$1
        Das funktioniert leider nicht.

        Was erwartest du / was ist passiert / was hast du dagegen unternommen / was hast du sonst gemacht / Fehlermeldung etc...

        Und der Link sagt mir zunächst mal überhaupt nix, weil ich noch nie etwas damit zu tun hatte.

        Dann lies das vollständig durch und versuche, es zu verstehen.
        Kleiner Hinweis:  [2]+ ist ein regulärer Ausdruck,
        $1 wird hier durch das ersetzt, was in den nicht vorhandenen Klammern () steht.

        Und jetzt darfst du selbst herausfinden, wo du die Klammern hinsetzen musst, damit es funktioniert,
        wenn du das nicht selbst machst stößt du bei jeder kleinen Änderung auf Probleme.

        Gruß
        Alexander Brock

        --
        [latex]\lim_{3 \to 4}{\sqrt{3}} = 2[/latex]

        1. a-zA-Z ↩︎

        2. a-zA-Z ↩︎

        1. Und jetzt darfst du selbst herausfinden, wo du die Klammern hinsetzen musst, damit es funktioniert,
          wenn du das nicht selbst machst stößt du bei jeder kleinen Änderung auf Probleme.

          Ja das habe ich sogar selbst herausgefunden.
          Aber er wandelt jetzt nicht wie gewünscht um:

          wenn ich eingebe www.meinedomain.at/gaestebuch kommt nicht wie gewünscht www.meinedomain.at/index.php?cat=gaestebuch sondern www.meinedomain.at/index.php?cat=index

          Das versteh ich jetz auch nicht

          1. Hallo Freunde des gehobenen Forumsgenusses,

            Aber er wandelt jetzt nicht wie gewünscht um:

            Ich glaube dir nicht, dass du innerhalb von 31 Minuten das ganze verlinke Document
            lesen und verstehen kannst, mach das doch bitte, bevor du hier weiter postest.
            BTW: mod_rewrite kann man loggen, wie das geht steht irgendwo im Apache Manual.

            Logge doch mal einen Zugriff und poste das hier
            (natürlich erst, wenn du die Seite über PCRE gelesen, verstanden und am Beispiel ausprobiert hast).

            Gruß
            Alexander Brock

            --
            SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:? ss:| de:> js:( ch:| sh:( mo:} zu:}
            http://againsttcpa.com
            1. Kann es sein dass der Internet-Explorer eine Datei auch ohne Angabe ihrer Endung aufruft?

              Wenn ich also eingebe www.meinedomain.at/gaestebuch sollte damit automatisch www.meinedomain.at/index.php?cat=gaestebuch aufgerufen werden.
              Dem kommt aber der Browser zuvor und ruft schon bevor diese RewriteRule greifen kann die bei mir tatsächlich existierende Datei www.meinedomain.at/gaestebuch.php auf.

              Oder liegts eher am Server der das automatisch managed?

              1. Hallo Albert.

                Oder liegts eher am Server der das automatisch managed?

                Möglicherweise.

                Einen schönen Dienstag noch.

                Gruß, Ashura

                --
                Selfcode: sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:) fl:( ss:) ls:[ js:|
                30 Days to becoming an Opera8 Lover -- Opera Mini on Treo
                Meine Browser: Opera 8.02 | Firefox 1.0.6 | Lynx 2.8.5 | Netscape 4.7 | IE 6.0
                [Deshalb frei! - Argumente pro freie Software]
          2. So funktionierts:

            RewriteEngine on
            RewriteRule ^ich_will_([a-zA-Z]+)_sehn index.php?cat=$1

            Bis auf den klitzekleinen Wehrmutstropfen, dass jeweils vor und nach der regexp schon was stehen muss.

            in diesem Fall: www.meinedomain.at/ich_will_gaestebuch_sehn
            wird korrekt weitergeleitet zu www.meinedomain.at/index.php?cat=gaestebuch

            Wie gehts auch ohne davor und danach? Ich will doch einfach nur den Variablennamen als Ordner anzeigen

            1. Hallo Freunde des gehobenen Forumsgenusses,

              Bis auf den klitzekleinen Wehrmutstropfen, dass jeweils vor und nach der regexp schon was stehen muss.

              Muss überhaupt nicht, im Gegenteil, vorher und hinterher was schreiben ist zusätzlicher Aufwand, warum tust du dir das an?

              Wie gehts auch ohne davor und danach? Ich will doch einfach nur den Variablennamen als Ordner anzeigen

              Ganz einfach: das davor und danach weglassen, das mit den Klammern scheinst du ja kapiert zu haben.

              Gruß
              Alexander Brock

              --
              SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:? ss:| de:> js:( ch:| sh:( mo:} zu:}
              http://againsttcpa.com
          3. Hi Albert,

            wenn ich eingebe www.meinedomain.at/gaestebuch kommt nicht wie gewünscht www.meinedomain.at/index.php?cat=gaestebuch sondern www.meinedomain.at/index.php?cat=index

            Sieh so aus, als würde da zweimal umgeleitet - wundert mich lediglich, dass das keine Endlos-Schleife gibt...

            Könntest mal sowas probieren:

            RewriteRule ^([^.]+)$ index.php?cat=$1

            Dann darf aber in dem was umgeleitet werden soll kein . drin vorkommen. Ungetestet, sag bitte, obs wie gewüscht funktioniert.

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
            Die Stoßstange ist aller Laster Anfang! (Häfft)
            1. RewriteRule ^([^.]+)$ index.php?cat=$1

              Dann darf aber in dem was umgeleitet werden soll kein . drin vorkommen. Ungetestet, sag bitte, obs wie gewüscht funktioniert.

              Ja das funktioniert
              Auch RewriteRule ^([a-zA-Z]+)$ index.php?link=$1 funktioniert

              aber mein neues Problem ist wie gesagt: https://forum.selfhtml.org/?t=113899&m=724225

              1. hi,

                aber mein neues Problem ist wie gesagt: https://forum.selfhtml.org/?t=113899&m=724225

                darauf hast du bereits eine antwort bekommen.

                darüber hinaus ist nicht notwendig, dass du jetzt jedem überall dein "neues problem" unter die nase reibst.
                gehe davon aus, dass wer sich einmal in einem fachthread reingehängt hat, idR. auch die restlichen zweige noch mitverfolgt - und unterlasse sowas dann bitte.

                gruß,
                wahsaga

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

    RewriteRule ^seite_([0-9]+).html$ seite.php?id=$1

    Es ist nicht korrekt, das hier "eine Variable als Zahl" definiert wird. Diese RewriteRules funktionieren so, dass links ein regulärer Ausdruck steht, der auf eine Eingabe angewendet wird und rechts eine Regel wie eine Eingabe auf den der reguläre Ausdruck passt behandelt wird.

    Reguläre Ausdrücke sind sehr mächtige Werkzeuge, sie sind eine Art Schablonen oder Textmuster die entscheiden, ob ein gegebener Text auf  eben dieses Muster passt oder nicht.

    Im obigen RewriteRule zum Beispiel bedeutet das ([0-9]+) dass genau an der Stelle beliebig viele Ziffern zwischen 0 und 9 stehen dürfen.

    Würde man diese Regel so umschreiben:

    RewriteRule ^seite_([0-9a-zA-Z]+).html$ seite.php?id=$1

    dann dürften an der Stelle nicht nur die Ziffern, sondern auch ein beliebiger großer oder kleiner Buchstabe von a bis z stehen.

    In $1 (siehe seite.php?id=$1) steht dann der von den ( ) eingegrenzte erkannte Text, also genau das was in seite_xxx.html zwischen dem _ und dem . steht.

    Um deine RewriteRule mit gutem Gewissen unter Kontrolle zu haben und nicht 100 mal im Forum nachfragen zu müssen, bis es funktioniert, solltest du dich mit regulären Ausdrücken ausseinandersetzen. Das muss nicht in Verbindung mit Perl sein, es reicht vollkommen zu verstehen wie diese Muster genau anzugeben sind. Vielleicht wirst du aus dieser Tabelle besser schlau:
    http://de.selfhtml.org/perl/sprache/regexpr.htm#zeichen
    Und lies am besten noch die danach kommenden zwei Tabellen und den Text drum herum durch.

    Damit die RewriteRule überhaupt greift, muss die linke Seite auf eine angegebene URL passen.

    Warum wird dieser Ausdruck also noch nicht die richtige Lösung für dich sein?
    ^seite_([0-9a-zA-Z]+).html$

    Wenn du mit den regulären Ausdrücken überhaupt nicht zurande kommst, kannst du doch alternativ mittels einer index.html im /gaestebuch Verzeichnis ganz einfach eine Umleitung auf index.php?cat=gaestebuch realisieren.

    Gruß,
    Cruz