jens65m: mod_rewrite

Hallo Community,

kurze Frage, hab zwar Google angestrengt werde aber nicht fündig.
Wie kann ich mit hilfe von mod_rewirte realisieren, dass der Pfad

http://www.example.com/index.php?option=wert&p=0

bzw.

http://www.example.com/?option=wert&p=0

umgeschrieben wird in

http://www.example.com/wert/0

dass also der Wert von "option" immer an erster Stelle und der Wert von "p" immer an zweiter Stelle erscheint.

Lg, Dennis

  1. Hallo,

    Wie kann ich mit hilfe von mod_rewirte realisieren, dass der Pfad

    http://www.example.com/index.php?option=wert&p=0
    bzw.
    http://www.example.com/?option=wert&p=0

    umgeschrieben wird in

    http://www.example.com/wert/0

    bitte geh nochmal in dich: Bist du sicher, dass du es nicht genau umgekehrt haben möchtest? Denn was du beschreibst, wäre sehr untypisch -normalerweise möchte man ja einfache, "schöne" URLs haben, und diese dann intern auf die technisch erforderliche Schreibweise umschreiben.

    Ciao,
     Martin

    --
    Ich liebe Politiker auf Wahlplakaten.
    Sie sind tragbar, geräuschlos, und leicht wieder zu entfernen.
      (Loriot, deutscher Satiriker)
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. hopla, selbstverständlich mein ich das ungekehrt.

      mittlerweile habe ich auch folgendes gefunden:

      RewriteEngine On
      RewriteRule ^([^/]*)/([^/]*)$ /index.php?option=$1&keyword=$2 [L]

      das ganze würde dann aus

      index.php?option=search&keyword=test

      /search/test

      machen. Nur habe ich selbstverständlich auch andere Funktionen.
      Zb.

      index.php?option=login&username=ben82

      (schlechtes Beispiel ich weiß). Leider wird dass dann aber nicht mehr umgeschrieben.
      Muss ich jede Regel einzeln definieren?

      Lg, Jens

      1. RewriteEngine On
        RewriteRule ^([^/]*)/([^/]*)$ /index.php?option=$1&keyword=$2 [L]

        leider funktioniert das leider auch nicht.
        Error 500

        woran liegt das?
        lg

        1. Hello,

          RewriteEngine On
          RewriteRule ^([^/]*)/([^/]*)$ /index.php?option=$1&keyword=$2 [L]

          leider funktioniert das leider auch nicht.
          Error 500

          Darübver mache ich mir jetzt mal keine Gedanken.
          Aber ich möchte doch mal darauf hinweisen, dass man für diesen Fall überhaupt keine Rewrite-Engine benötigt. Es wird ja immer dieselbe Stammressource (index.php) angesprochen. Warum lässt Du DIE dann nicht gleich die Auswertung vornehmen?

          In $_SERVER['PATH_INFO'] stecken deine gesuchten Parameter, wenn das Feature 'Pathinfo' nicht ausgeschaltet ist. Das Script (index.php) kann diese Parameter also direkt extrahieren. Das könnte jetzt z.B. auch mittels einer Datenbankabfrage stattfinden

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Darübver mache ich mir jetzt mal keine Gedanken.
            Aber ich möchte doch mal darauf hinweisen, dass man für diesen Fall überhaupt keine Rewrite-Engine benötigt. Es wird ja immer dieselbe Stammressource (index.php) angesprochen. Warum lässt Du DIE dann nicht gleich die Auswertung vornehmen?

            Vielleicht weil man nicht will, dass für jede Anfrage an den Vhost der PHP Interpreter benötigt wird? Das vom OP verwendete Pattern ist nicht optimal, aber es bietet bereits die Möglichkeit, diesen (immensen) Overhead zu verhindern.

            1. Hello,

              Darübver mache ich mir jetzt mal keine Gedanken.
              Aber ich möchte doch mal darauf hinweisen, dass man für diesen Fall überhaupt keine Rewrite-Engine benötigt. Es wird ja immer dieselbe Stammressource (index.php) angesprochen. Warum lässt Du DIE dann nicht gleich die Auswertung vornehmen?

              Vielleicht weil man nicht will, dass für jede Anfrage an den Vhost der PHP Interpreter benötigt wird? Das vom OP verwendete Pattern ist nicht optimal, aber es bietet bereits die Möglichkeit, diesen (immensen) Overhead zu verhindern.

              Ach, da habe ich wohl überlesen, dass keine PHP-Engine zum Einsatz kommt, sondern nur die Ressource zufällig 'index.php' heißt?

              Da schmeißen wir mal lieber die Rewrite-Engine an und mappen hin, damit es an einer anderen Stelle wieder zurück gemappt werden kann. Irgendwie muss man die Server ja beschäftigen.

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Ach, da habe ich wohl überlesen, dass keine PHP-Engine zum Einsatz kommt, sondern nur die Ressource zufällig 'index.php' heißt?

                You didn't get it.

                1. Hello,

                  Ach, da habe ich wohl überlesen, dass keine PHP-Engine zum Einsatz kommt, sondern nur die Ressource zufällig 'index.php' heißt?

                  You didn't get it.

                  Bahnhof?

                  Liebe Grüße aus dem schönen Oberharz

                  Tom vom Berg

                  --
                   ☻_
                  /▌
                  / \ Nur selber lernen macht schlau
                  http://bergpost.annerschbarrich.de
                  1. Es ist tatsächlich so, dass die index.php die einzige Datei ist, die verwendet wird.

                    Die mod-rewrite ist aktiviert. in der .htaccess steht sonst nichts. andere umschreibungen funktionieren komischerweise?!

                    lg

                    1. Also die RewriteRule soll folgende funktion haben:

                      aus der Adresse:

                      /irgendwas.php?var1=value&var2=anothervalue$var3=onemore...

                      ist das möglich die RewriteRule so zu gestallten, dass die Umschreibung auf

                      /value/anothervalue/onemore

                      auch für weitere "var"s also Variablen gilt.
                      Diese Variablen können aber auch unterschiedliche Namen haben.

                      Nochmal konkret:
                      Ist es möglich mit einer RewriteRule beide Umschreibung zu ermöglichen:

                      /index.php?car=fiord&color=red
                      /service.php?computer=pinapple&hdd=120

                      auf

                      /fiord/red
                      /pinapple/120

                      lg, Jens

                      1. Das Problem ist nämlich, dass ich teilweise Verschieden Parameter verwenden möchte.
                        Zb.

                        /index.php?option=search&keyword=suchanfrage -> /search/suchanfrage4

                        /index.php?option=newsletter&username=benbeispiel -> /newsletter/benbeispiel

                        lg

                        1. Hello,

                          Das Problem ist nämlich, dass ich teilweise Verschieden Parameter verwenden möchte.

                          Was hältst Du von 'if'?

                          if (isset($_SERVER['PATH_INFO']))
                          {
                             $page = auswerten_path_info();
                          }
                          else
                          {
                             $page = auswerten_url_parameter();
                          }

                          Liebe Grüße aus dem schönen Oberharz

                          Tom vom Berg

                          --
                           ☻_
                          /▌
                          / \ Nur selber lernen macht schlau
                          http://bergpost.annerschbarrich.de
                          1. Was hältst Du von 'if'?

                            if (isset($_SERVER['PATH_INFO']))
                            {
                               $page = auswerten_path_info();
                            }
                            else
                            {
                               $page = auswerten_url_parameter();
                            }

                            versteh ich jetzt nicht so ganz. es geht mir ja darum den pfad umzuschreiben und nicht um die auswertung.
                            lg

                            1. Hello,

                              Was hältst Du von 'if'?

                              if (isset($_SERVER['PATH_INFO']))
                              {
                                 $page = auswerten_path_info();
                              }
                              else
                              {
                                 $page = auswerten_url_parameter();
                              }

                              versteh ich jetzt nicht so ganz. es geht mir ja darum den pfad umzuschreiben und nicht um die auswertung.

                              Und für wen willst Du den Pfad umschreiben, wenn ihn keiner auswertet?

                              Liebe Grüße aus dem schönen Oberharz

                              Tom vom Berg

                              --
                               ☻_
                              /▌
                              / \ Nur selber lernen macht schlau
                              http://bergpost.annerschbarrich.de
                              1. ich will einfach nur, dass die Pfade umgeschrieben werden.
                                Von

                                /index.php?option=test&var1=value1&var2=value2...

                                in

                                /test/value1/value2

                                und das soll geschehen egal wie der Parameter heißt.
                                Also die RewriteRule soll auch für

                                /index.php?option=test&xy=1&z=4

                                gelten und

                                /test/1/4

                                daraus machen.

                                Ist das mit einer RewriteRule möglich.

                                Und klar sollen die GET-Parameter ausgewertet werden.
                                Nur versteh ich dein Skript nicht. Das hilft mir doch nicht den Pfad umzuschreiben oder?!

                                Lg, jens

                                1. Hello,

                                  ich will einfach nur, dass die Pfade umgeschrieben werden.
                                  Von

                                  /index.php?option=test&var1=value1&var2=value2...

                                  in

                                  /test/value1/value2

                                  Ich dachte, anders herum soll es sein?
                                  https://forum.selfhtml.org/?t=200634&m=1352383

                                  Und da stellt sich dann die Frage, warum es noch von der Rewrite-Engine umgeschrieben werden soll, wenn es doch im PHP-Script sowieso beides genauso brauchbar ist?

                                  Schreib die Parameter doch im PHP-Script um, wenn dies überhaupt notwendig ist.

                                  if (isset($_SERVER['PATH_INFO']))
                                  {
                                     ## Pathinfo zerlegen in einzelne Parameter
                                     $_pathinfo = explode('/',$_SERVER['PATH_INFO']);
                                  }
                                  else
                                  {
                                     ## alternative Vorgehensweise
                                     ## ...
                                  }

                                  Liebe Grüße aus dem schönen Oberharz

                                  Tom vom Berg

                                  --
                                   ☻_
                                  /▌
                                  / \ Nur selber lernen macht schlau
                                  http://bergpost.annerschbarrich.de
                                  1. Hello,

                                    Ich dachte, anders herum soll es sein?

                                    selbstverständlich

                                    Schreib die Parameter doch im PHP-Script um, wenn dies überhaupt notwendig ist.

                                    if (isset($_SERVER['PATH_INFO']))
                                    {
                                       ## Pathinfo zerlegen in einzelne Parameter
                                       $_pathinfo = explode('/',$_SERVER['PATH_INFO']);
                                    }
                                    else
                                    {
                                       ## alternative Vorgehensweise
                                       ## ...
                                    }

                                    danke jetzt hab ichs gerafft
                                    nur funktionert dass dann auch wenn ich nicht den pfad
                                    http://www.example.com/subfolder/file.php/par1/par2/par3
                                    sondern
                                    http://www.example.com/subfolder/par1/par2/par3
                                    verwende. Ich denke nicht.?!

                                    Lg

        2. Hallo,

          RewriteEngine On
          RewriteRule ^([^/]*)/([^/]*)$ /index.php?option=$1&keyword=$2 [L]

          leider funktioniert das leider auch nicht.
          Error 500

          woran liegt das?

          Das könnte an vielem liegen - versuche Zugriff auf das Error-Log des Apache-Webservers zu bekommen.

          Mögliche Ursachen:

          * mod_rewrite ist nicht installiert
           * mod_rewrite ist installiert, aber nicht geladen
           * Du darfst laut zentraler Serverkonfiguration mod_rewrite nicht
             konfigurieren.
           * Da steht noch etwas anderes in der .htaccess, was Du laut zentraler
             Konfiguration nicht tun darfst.
           * ...?

          Viele Grüße,
          Christian