PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Apache rewrite rule



his_lordness
19.10.09, 09:56
Hallo zusammen,

ich habe folgendes Apache2 Problem:

Ich erhalte über den APACHE 2 diveres Nachrichten. D.h. ich nehme Nachrichten entgegen u. übergebe Sie Anwendungen welche mit den Nachrichten irgendetwas machen.

Nun habe ich folgendes Problem:

Sofern ein User aus dem INET folgende URL aufruft:

http://info/test/delivery

erkennt die dahinterstehende Anwendung den Query String /delivery nicht!

Sofern dieser allerdings die URL folgendermaßen abruft:

http://info/test?delivery

erkennt mein Apache den querystring delivery u. übergibt dies der weiteren Anwendung.

Wie könnte ich meine rewrite rule im Apache dahingehend ändern das es funzt??

Vorab Danke.

Roger Wilco
19.10.09, 11:02
Zunächst mal solltest du dir über den Unterschied zwischen der ersten URI und der zweiten URI klar werden. Beide sind nicht gleichwertig!

Im ersten Fall (http://info/test/delivery) ist "delivery" Teil des Pfades, im zweiten Fall ist es Teil des Query-Strings. Das ist für ein verarbeitendes Programm ein großer Unterschied! Siehe RFC 3986 (http://www.ietf.org/rfc/rfc3986.txt) (Abschnitt 3).

Wenn der Unterschied von dem Skript aus verarbeitet werden soll, willst du dich über die CGI-Umgebungsvariable PATH_INFO informieren. Wenn der Unterschied "von außen", d. h. vom Webserver verarbeitet werden soll, könnte eine Rewrite-Regel folgendermaßen aussehen:

RewriteRule ^/test/(.*) test?$1 [L]

his_lordness
19.10.09, 11:27
Zunächst mal solltest du dir über den Unterschied zwischen der ersten URI und der zweiten URI klar werden. Beide sind nicht gleichwertig!

Im ersten Fall (http://info/test/delivery) ist "delivery" Teil des Pfades, im zweiten Fall ist es Teil des Query-Strings. Das ist für ein verarbeitendes Programm ein großer Unterschied! Siehe RFC 3986 (http://www.ietf.org/rfc/rfc3986.txt) (Abschnitt 3).

Wenn der Unterschied von dem Skript aus verarbeitet werden soll, willst du dich über die CGI-Umgebungsvariable PATH_INFO informieren. Wenn der Unterschied "von außen", d. h. vom Webserver verarbeitet werden soll, könnte eine Rewrite-Regel folgendermaßen aussehen:

RewriteRule ^/test/(.*) test?$1 [L]

Hallo Roger,
danke für die umgehende Unterstützung.

der Punkt ist folgender:

In der httpd.conf habe ich derzeit einfach den Eintrag:
^/test$ /HTTPController
Wenn jemand von außen kommt u. wie oben beschrieben auf
http://info/test?delivery
zugreift erkennt mein HTTPController, das es sich um den Nachrichtentyp delivery handelt.

Das einzige was ich erreichen möchte, ist das ich von außen http://info/test/delivery in die jeweilige Anwendung eintrage(Browser sonstiges) u. ich über die rewrite Funktion des Apaches meinem HTTPController mitteile, das alles was nach http://info/test/ kommt (delivery, pick usw.) er den String im klartext übergibt.

Dein Beispiel funktioniert leider nicht.

Vielen Dank.

Roger Wilco
19.10.09, 11:41
RewriteEngine on
RewriteRule ^test$ /HTTPController
RewriteRule ^test/(.*) /test?$1 [L]
Works for me™.

his_lordness
19.10.09, 11:53
RewriteEngine on
RewriteRule ^test$ /HTTPController
RewriteRule ^test/(.*) /test?$1 [L]
Works for me™.

Hm, tut leider immer noch nicht.

Roger Wilco
19.10.09, 11:57
"Tut nicht" ist keine Fehlerbeschreibung.

his_lordness
19.10.09, 12:01
"Tut nicht" ist keine Fehlerbeschreibung.


Hola Roger,

richtig. :)

Der Apache reagiert überhaupt nicht nach den Einträgen, d.h. ich bekomme die Standardmeldung

The requested URL /test/delivery was not found on this server.

Ich denke nicht das es damit zusammenhängt das der Apache auf nem WIN2003 Server läuft?

his_lordness
19.10.09, 12:08
"Tut nicht" ist keine Fehlerbeschreibung.

Des Weiteren ist aus den Logs herauszulesen, das er stets auf:

File does not exist: D:/BIS/Apache2/htdocs/test

verweist.

Rain_maker
19.10.09, 12:31
Correct me, if I'm wrong, aber ist dieser Pfad nicht eher für ein anderes Forum (Stichwort: Redmond) passender?



File does not exist: D:/BIS/Apache2/htdocs/test

Wo kommt denn der Laufwerksbuchstabe auf einmal her?

(Falls ich gerade mächtig auf dem Schlauch stehe, hab ich nix gesagt ...)