björn: Apache URL Rewriting

Hallo,

ich stehe vor folgendem Problem:

Ich möchte vom Apache die URL

http://*/engine/arg1/val1/arg2/val2/.../test.php (oder auch html, htm, ...)
in
http://*/engine.php?arg1=val1&arg2=val2&...&file=test.php (...)

umgeschrieben bekommen, wobei der * für einen beliebigen Host steht und die URL auch beliebig viele Argumente enthalten können soll.

Ich bekomme das absolut nicht hin, könnte mir da einer helfen?

Grüße, Danke für die Mühe,

Björn H.

  1. Ich möchte vom Apache die URL

    http://*/engine/arg1/val1/arg2/val2/.../test.php (oder auch html, htm, ...)
    in
    http://*/engine.php?arg1=val1&arg2=val2&...&file=test.php (...)

    umgeschrieben bekommen, wobei der * für einen beliebigen Host steht und die URL auch beliebig viele Argumente enthalten können soll.

    Ich bekomme das absolut nicht hin, könnte mir da einer helfen?

    also ich weiss zwar nicht genau wie du dir das vorgestellt hast, aber da das PHP ist, muss natürlich PHP die URL erstellen...

    ich könnt mir gut sowas mit formularen vorstellen (get), also:

    <form method='get' action='test.php'>
    <input type='submit' name='test1' value='wert1'>
    </form>

    beim klicken steht dann in der url eingine.php?test1=wert1

    so kann das dann ausgearbeitet werden...

    nur so ne idee :-)

    1. Hallo,

      nein, hat nichts mit PHP zu tun. Die Links erstelle ich natürlich manuell. es geht nur darum, dass man im Browser
      http://*/engine/arg1/val1/test.php
      aufrufen kann und der Apache das dann nach
      http://*/engine.php?arg1=val1&file=test.php
      rewritet, damit ich die Argumente weiter normal mit PHP verarbeiten kann. Sinn und Zweck der Sache ist es die Seite 1. suchmaschinenfreundlich zu machen und 2. sieht die URl so besser aus *g*

      Grüße aus Berlin,

      Björn H.

      1. Für meinen lokalen IIS hab ich das schon:

        RewriteRule (.*/engine)(?[^/]*)?/([^/]*)/([^/]*)(.*?) $1(?2$2&:?)$3=$4$5 [N,I]
        RewriteRule (.*/engine)(?[^/]*)?/(.*) $1.php(?2$2&:?)file=$3 [I,L]

        Gut, beim Apache müsste man das I durch NC für (case insensitive) ersetzen, aber da liegt der Fehler nicht. Der Apache versteht die Rules trotzdem nicht (er schmiert ab).

        Grüße aus Berlin,

        Björn H.

    2. hallo,

      also ich weiss zwar nicht genau wie du dir das vorgestellt hast, aber da das PHP ist, muss natürlich PHP die URL erstellen...

      Nein, mit PHP hat das gar nichts zu tun. Es ist völlig richtig, daß Björn versucht, seinen Apache korrekt zu instruieren.

      Für Björn:
      du hast natürlich http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html gründlich nachgelesen und bist sicher, daß mod_rewrite auch per "LoadModule" angesprochen wird? Was sagen denn deine Apache-logs zum Thema?

      Grüße aus Berlin

      Christoph S.

      1. Hallo Christoph,

        Hatte grade in meinem VirtualHost für die entsprechende (Sub)Domain folgendes drin:

        RewriteEngine on
        RewriteRule (.*/engine)(?[^/]*)?/([^/]*)/([^/]*)(.*?) $1(?2$2&:?)$3=$4$5 [N,NC]
        RewriteRule (.*/engine)(?[^/]*)?/(.*) $1.php(?2$2&:?)file=$3 [NC,L]

        Beim Reloaden des Apaches dann:

        PHP4 SSL Reload httpd

        Syntax error on line 227 of /etc/httpd/[..]
        RewriteRule: cannot compile regular expression '(.*/engine)(?[^/]*)?/([^/]*)/([^/]*)(.*?)'

        mod_rewrite ist korrekt implementiert, ich benutze es auch schon für etwas anderes erfolgreich.

        Diesmal bleiben die Grüße in der gleichen Stadt ;)

        Björn H.

    3. use Mosche;

      http://*/engine/arg1/val1/arg2/val2/.../test.php (oder auch html, htm, ...)
      in
      http://*/engine.php?arg1=val1&arg2=val2&...&file=test.php (...)

      Das mit den beliebigen Hosts lasse ich mal weg, das ist ja einfach in der Doku nachzulesen, wie das funktioniert (habe es momentan auch nicht präsent, müsste selber nachlesen :-)).

      Zum anderen:
      Wäre es nicht einfacher, du lieferst unter http://*/engine die Ressource http://*/engine.php aus. Dann passiert folgendes: der Aufruf von http://*/engine/arg1/var1/.../argn/varn bewirkt, dass in der Umgebungsvariablen PATH_INFO arg1/var1/.../argn/varn drin steht. Das müsstest du halt dann händisch parsen. Das mit dem file=... bekommst du dann da auch irgendwie rein.

      Infos zu PATH_INFO auch in der Apache-Doku.

      use Tschoe qw(Matti);

      --
        Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
      1. Wäre es nicht einfacher, du lieferst unter http://*/engine die Ressource http://*/engine.php aus. Dann passiert folgendes: der Aufruf von http://*/engine/arg1/var1/.../argn/varn bewirkt, dass in der Umgebungsvariablen PATH_INFO arg1/var1/.../argn/varn drin steht. Das müsstest du halt dann händisch parsen. Das mit dem file=... bekommst du dann da auch irgendwie rein.

        Die Variante hatte ich schon, da haben aber die Sessions aus irgendeinem Grund nicht funktioniert. Deshalb brauch ich das nun so und am besten jetzt gleich =( Stehe etwas unter Druck.

        MfG,

        Björn H.