Hagen: mod_rewrite

Hey,
thema:mod rewrite

www.meineseite.de?seite=home <<<steht als URL da
www.meineseite.de/home <<<<soll dort stehen

kann mir jemand sagen wie meine .htacces aussehen müsste damit ich das erreiche??

Wenn das erreicht ist, meine Frage dazu. Schicke ich daten an ein script(per $_GET), schlägt mod_rewrite dann zu, nach dem das script die variablen bekommen hat, oder kommen diese gar nicht erst an, und ich brauch dafür wieder eine Regel?
Bsp:
www.meineseite.de?seite=home&user=niemand
soll werden zu
www.meineseite.de/home ist dann aber $_GET['user'] immer noch "niemand" oder müsste ich den umweg über:
www.meineseite.de/home/niemand gehen und dann die URL auslesen???

Also ihr lichtspender... freu mich auf eure antworten.

MFG Hagen

  1. hi,

    www.meineseite.de?seite=home <<<steht als URL da
    www.meineseite.de/home <<<<soll dort stehen

    Also willst du www.meineseite.de/home im Browser aufrufen, und www.meineseite.de/?seite=home soll intern daraus werden?

    kann mir jemand sagen wie meine .htacces aussehen müsste damit ich das erreiche??

    So allgemein umzuleiten, wäre nicht besonders clever.
    Auch www.meineseite.de/bild.jpg würde dann umgeleitet, und www.meineseite.de/unterordner/... ebenfalls.

    Also solltest du erst mal für die Menge aller umzuleitenden Anfragen ein geeignetes Muster suchen.

    Nehmen wir doch zum Beispiel mal nur Kleinbuchstaben, ohne Punkt und Slash etc.

    RewriteRule ^([a-z]+)$ /seite.xyz=$1

    seite wurde hier in seite.xyz umbenannt (bietet sich ja sowieso an, wenn irgendein Script dahinterliegt).
    Andernfalls müsstest du die Anfrage nach seite noch extra vom Umschreiben ausschließen.

    Wenn das erreicht ist, meine Frage dazu. Schicke ich daten an ein script(per $_GET), schlägt mod_rewrite dann zu, nach dem das script die variablen bekommen hat, oder kommen diese gar nicht erst an, und ich brauch dafür wieder eine Regel?

    Kommt drauf an.
    Beim Umschreiben wird der Query-String nicht ohne weiteres beachtet.
    Du kannst aber über das Flag [QSA], query string append, angebenen, dass der originale Querystring wieder zum Umschreibeergebnis hinzugefügt werden soll.

    www.meineseite.de?seite=home&user=niemand
    soll werden zu
    www.meineseite.de/home ist dann aber $_GET['user'] immer noch "niemand"

    Warum sollte es?
    "niemand" kommt im URL www.meineseite.de/home überhaupt nicht vor, also wo soll es herkommen?

    oder müsste ich den umweg über:
    www.meineseite.de/home/niemand gehen und dann die URL auslesen???

    Oder eben entsprechend umschreiben.

    Weitere Fragen beantwortet das Manual zum Modul mod_rewrite, es gibt den URL Rewriting Guide, und es gibt gute deutschsprachige Ressourcen wie http://www.modrewrite.de/

    gruß,
    wahsaga

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

      Warum sollte es?
      "niemand" kommt im URL www.meineseite.de/home überhaupt nicht vor, also wo soll es herkommen?

      Deshalb ja die Frage wann mod_rewrite zuschlägt, bevor oder nachdem die daten an das script gesendet wurden.

      Dann kümmer ich mich mal um die Links

      Vielen Dank!!!

      MFg hagen

      1. hi,

        Deshalb ja die Frage wann mod_rewrite zuschlägt, bevor oder nachdem die daten an das script gesendet wurden.

        Davor natürlich - noch ist ja gar nicht bekannt, "wohin" die Daten gehen sollen.

        http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html.en#InternalAPI

        gruß,
        wahsaga

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

    www.meineseite.de?seite=home <<<steht als URL da
    www.meineseite.de/home <<<<soll dort stehen

    Ohne sicher zu wissen, ob das die optimale Lösung ist, funktionieren tut es jedenfalls:

      
    RewriteEngine on #ist denke ich klar  
    RewriteBase /    #da gehört das Verzeichnis hin, für das die Regeln gelten sollen, in dem Fall root  
      
    RewriteCond %{SCRIPT_FILENAME} !-f #Wenn der request nicht auf eine existiente Datei zielt...  
    RewriteRule ^(.*)\..?htm.?$  /script.php?seite=$1 [L] #...wird aus /foo.?htm? -> /script.php?page=foo  
    #somit wird bar.html trotzdem aufgerufen, wenn es existiert!  
    #dann weiter:  
    RewriteCond %{SCRIPT_FILENAME} !-f #Request ist keine existierende Datei...  
    RewriteCond %{SCRIPT_FILENAME} !-d #...und kein existierendes Verzeichnis, dann:  
    RewriteRule ^(.*)$ /main.php?page=$1 [L] #wird aus /foo -> /script.php?seite=foo  
    
    

    Vielleicht geht es auch eleganter, daß würde ich dann selbst gerne wissen ;)
    Aber es ist möglich mit /foo, foo.?htm? (also shtm, shtml, xhtm, xhtml u.s.w.], die entsprechende Seite aufzurufen.
    Durch die RewriteConditions bleibt es aber trotzdem möglich in vorhanden Verzeichnisse zu wechseln, bzw. statische URL's aufzurufen.
    Für Deinen Fall, wenn Du die Seiten nicht auch mit Endung erreichen willst, kann Du eigentlich die erste RewriteCond und RewriteRule löschen. Der untere Block würde dann reichen.

    netten Tag
    ^da Powl

    --
    ===============================
    powl.hat-gar-keine-homepage.de/
    1. Sehr schön, danke werd das mal testen!

      MFG HAgen

    2. hallo,

      Vielleicht geht es auch eleganter, daß würde ich dann selbst gerne wissen ;)

      Ja, da gibt es eine Möglichkeit. Schließlich muß es gar nicht immer mod_rewrite sein. Allerdings klappt das nicht, wenn es um bestimmte Übergabeparameter gehen sollte.

      www.meineseite.de?seite=home <<<steht als URL da

      ist ohnehin keine sehr glaubwürdige Angabe (siehe auch wahsagas posting). Man kann aber
        www.meineseite.de/seite
      tatsächlich auf
        http://www.meineseite.de/home
      "umleiten", indem man
        RedirectPermanent /seite http://www.meineseite.de/home
      angibt. Das gilt dann für das gesamte Verzeichnis. Redirect wird nicht von mod_rewrite vermittelt, sondern von mod_alias.

      Grüße aus Berlin

      Christoph S.

      --
      Visitenkarte
      ss:| zu:) ls:& fo:) va:) sh:| rl:|
      1. Hallo Christoph,

        Ja, da gibt es eine Möglichkeit. Schließlich muß es gar nicht immer mod_rewrite sein. Allerdings klappt das nicht, wenn es um bestimmte Übergabeparameter gehen sollte.

        Oops, die Endung .de hatte ich übersehen, bzw. als php interpretiert. Mein Beispiel bezieht sich ja auf ein php script, das mittels $_GET['seite'] die Information über den anzuzeigenden Inhalt übermittelt bekommt.
        also http://example.org/foo nach  http://example.org/script.php?seite=foo auflösen.
        In dem Fall also durchaus ein bestimmter Übergabeparameter. Somit käme  käme man hier mit einem einfachen Redirect wohl nicht aus?

        netten Tag & Grüße _nach_ Berlin [auch so 'toller' Regen? :( )
        ^da Powl

        --
        ===============================
        powl.hat-gar-keine-homepage.de/
        1. hallo,

          Mein Beispiel bezieht sich ja auf ein php script, das mittels $_GET['seite'] die Information über den anzuzeigenden Inhalt übermittelt bekommt.

          Wenn es tatsächlich _nur_ um PHP ginge, ließe sich in Abhängigkeit von der GET- oder POST-Variablen noch etwas anderes anstellen, indem man header("Location: http://www.example.com/"); benutzt. Dann muß der Apache das nicht erledigen.

          also http://example.org/foo nach  http://example.org/script.php?seite=foo auflösen.
          In dem Fall also durchaus ein bestimmter Übergabeparameter. Somit käme  käme man hier mit einem einfachen Redirect wohl nicht aus?

          Nein, so würde das nicht funktionieren.

          netten Tag & Grüße _nach_ Berlin [auch so 'toller' Regen? :( )

          Es tröpfelt gelegentlich, aber das ist immer noch lange nicht genug für die Pfifferlinge.

          Grüße aus Berlin

          Christoph S.

          --
          Visitenkarte
          ss:| zu:) ls:& fo:) va:) sh:| rl:|
          1. Hallo,

            Es tröpfelt gelegentlich, aber das ist immer noch lange nicht genug für die Pfifferlinge.

            Jetzt weiß man wenigstens was Du zum Holunderwein ißt! :-x
            'n Guten!

            netten Abend
            ^da Powl

            --
            ===============================
            powl.hat-gar-keine-homepage.de/
            1. hallo Powl,

              Jetzt weiß man wenigstens was Du zum Holunderwein ißt! :-x

              Nö. Aber solange das Topic HOLUNDERWEIN offensichtlich noch in der Diskussion ist und mir folglich (noch) nicht zur Verfügung steht, kann ich dir bedauerlicherweise keine näheren Auskünfte geben.

              Grüße aus Berlin

              Christoph S.

              --
              Visitenkarte
              ss:| zu:) ls:& fo:) va:) sh:| rl:|
              1. habe d'ehre Christoph

                Nö. Aber solange das Topic HOLUNDERWEIN offensichtlich noch in der Diskussion ist ...

                Was verleitet Dich zu dieser obskuren Annahme?

                man liest sich
                Wilhelm

                1. hallo Wilhelm,

                  Was verleitet Dich zu dieser obskuren Annahme?

                  Mein Holunderwein? Und daß du das Topic für so wichtig erachtet hast, es ausdrücklich unter vorläufige Kuratel stellen zu müssen?`Wenn man etwas explizit unter Nennung seines Namens ausschließt, muß es ja zuvor irgendwo diskutiert worden sein ...

                  *g*

                  Grüße aus Berlin

                  Christoph S.

                  --
                  Visitenkarte
                  ss:| zu:) ls:& fo:) va:) sh:| rl:|