Url mit mod_rewrite ändern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Url mit mod_rewrite ändern

    Voraussetzung mod_rewrite ist vorhanden und aktiv;


    Warum Überhaupt der Aufwand?

    ganz einfach, die Sumas mögen eher Url folgenden Formates:

    www.domain.de/datei.htm

    bei php sieht es meist so aus:

    www.domain.de/datei.php?a=1&b=2


    .htaccess
    Code:
     
    #muss ins root Verzeichnis
    
    RewriteEngine on 
    Options +FollowSymlinks 
    RewriteBase /
    
    RewriteRule ^datei(.*)-(.*).htm$ /datei.php?a=$1&b=$2 [L]
    Das [L] kommt hinter der letzten Anweisung in der .htaccess getrennt mit ein Leerschritt, ist optinal, und gibt an das die rules zu Ende sind.

    www.domain.de/datei1-2.htm

    der Aufruf dieser URL bringt jetzt das selbe zu Tage wie:

    www.domain.de/datei.php?a=1&b=2

    Im Quellcode müssen die Links jetzt halt noch angepasst werden das sie nach der php Abarbeitung so aussehen datei1-2.htm.

    Beispiel:
    PHP-Code:
    //Normal
    echo 'www.domain.de/datei.php?a='.$a_id.'&b='.$b_id;

    //nach Anpassung
    echo 'www.domain.de/datei'.$a_id.'-'.$b_id.'.htm'

    Oder Ihr wollt statt

    www.domain.de/datei.php?a=1&b=2

    www.domain.de/datei/1/2/

    .htaccess
    Code:
      
    RewriteEngine on 
    Options +FollowSymlinks 
    RewriteBase /
    
    RewriteCond %{REQUEST_URI} datei/(.*)/(.*)/$
    RewriteRule datei/(.*)/(.*)/$ /datei.php?a=$1&b=$2


    Fehlerquellen
    - .htaccess liegt im falschen Ordner
    - 2 .htacces vorhanden, 1x root und 1x in unterordner wo die Datei raus aufgerufen wird.
    - Die Pfade stimmen nicht, kommt öfter vor
    - mod_rewrite nicht aktiv (siehe phpinfo)
    - Namenskonflikte
    - manche hoster benötigen absolute urls in der rule
    - Datei Endung .htm und .html beachten

    - Rangfolge in der .htacces bei gleichen dateinamen nicht beachtet.
    Beispiel:

    Code:
     
    # Falsch
    RewriteRule datei(.*)-(.*).htm$ /datei.php?a=$1&b=$2
    RewriteRule datei(.*)-(.*)-(.*).htm$ /datei.php?a=$1&b=$2&c=$3
    
    # Richtig
    RewriteRule datei(.*)-(.*)-(.*).htm$ /datei.php?a=$1&b=$2&c=$3
    RewriteRule datei(.*)-(.*).htm$ /datei.php?a=$1&b=$2


    Bei weiteren Fragen, die Suchfunktion bemühen, es gibt hier noch ein extrem grosser Beitrag von Abraxax darüber.


    EDIT:

    NACHTRAG: hab noch zwei Fehlerquellen hinzugefügt.

    Link zum Apache - mod_rewrite doc
    http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html

    Zuletzt geändert von marc75; 23.10.2004, 10:48.
    mfg
    marc75

    <Platz für anderes>

  • #2
    Sunshine CMS
    BannerAdManagement
    Borlabs - because we make IT easier
    Formulargenerator [color=red]Neu![/color]
    Herkunftsstatistik [color=red]Neu![/color]

    Kommentar


    • #3
      Hey, das is echt spitze

      Das "Tutorial" ist zwar sehr klein, aber zeigt genau dass, was die meisten (wie ich sehen) wollten und net mehr

      Danke!


      gruß, matze


      PS: Warum heißt dieser Smilie <- : g r i n : ?!? Müsste doch eher :thumbsup: heißen :P


      EDIT: Das zweite funktioniert bei mir, aber das erste nicht? Gibts beim ersten keine RewriteCon?
      Zuletzt geändert von matz0r; 22.10.2004, 23:43.

      Kommentar


      • #4
        Hab mir das nochmal um die Ohren geschlagen ...

        So funktioniert es bei mir:

        PHP-Code:
        RewriteRule ^index(.*)-(.*)(\.html?)$ index.php?area=$1&action=$[L
        Das hier dürfte auch den meisten gefallen:

        PHP-Code:
        RewriteRule ^index,(.*),(.*),(.*)(\.html?)$ index\.php?a=$1&b=$2&c=$[L
        ergibt sowas:


        http://www.lankreis.net/index,home,global,id.html

        Kommentar


        • #5
          hab vielleicht vergessen zu erwähnen,
          die erste rule hat die endung .htm und nicht .html
          mfg
          marc75

          <Platz für anderes>

          Kommentar


          • #6
            Ne ne, das hab ich schon richtig gelesen.. Ging trotzdem nicht! Aber hab nun ja ne "eigene" Lösung!

            Kann ich aber jetzt per RewriteCond erkennen ob der Link nur 1 Variable (global,home,x.html) oder 2 Variablen (global,home,x,y.html) hat?

            Sonst müsste ich bei jedem Link alles einbauen:

            global,home,0,0.html

            anstatt

            global,home.html



            ---------

            ich dachte mir das so:

            PHP-Code:
            RewriteCond %{REQUEST_URI} (.*),(.*)(\.html?)$
            RewriteRule ^(.*),(.*)(\.html?)$ index\.php?area=$1&action=$2

            RewriteCond 
            %{REQUEST_URI} (.*),(.*),(.*)(\.html?)$
            RewriteRule ^(.*),(.*),(.*)(\.html?)$ index\.php?area=$1&action=$2&id=$
            Aber das funktioniert schonmal nicht

            Kommentar


            • #7
              Da ich mein beitrag nicht mehr editieren kann so:


              PHP-Code:
              RewriteRule ^(.*),(.*),(.*),(.*)(\.html?)$ index\.php?area=$1&action=$2&id=$3&id2=$[L]
              RewriteRule ^(.*),(.*),(.*)(\.html?)$ index\.php?area=$1&action=$2&id=$[L]
              RewriteRule ^(.*),(.*)(\.html?)$ index\.php?area=$1&action=$[L
              Damit funktioniet es

              Kommentar


              • #8
                Hatte da die tage auch mal was zu mod_rewrite verzapft.
                Vielleicht findets ja jemand interessant.
                Angehängte Dateien

                Kommentar


                • #9
                  php - nichts ist unmöglich! tolle sache. danke marc.

                  PS: Aber wenn ich eh nur die eingangssite in der suma sehen will, brauch i das net - oder?


                  lg, WL
                  Es gibt keine dummen Fragen, es gibt nur schlecht gestellte Fragen und ein Haufen unnützer Antworten ...

                  Kommentar


                  • #10
                    Original geschrieben von Willy_Lernen
                    PS: Aber wenn ich eh nur die eingangssite in der suma sehen will, brauch i das net - oder?
                    wenn eh nur die einstiegsseite in den SuMas zu finden ist, dann brauch i höchstvermutlich deine seite net.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar

                    Lädt...
                    X