Der Martin: Apache, JS parsen als PHP, Zugriff auf Parameter.

Beitrag lesen

Hallo,

ich sitze jetzt schon seit einigen Stunden an einem recht irrefuehrenden Problem - und ich sehe so langsam immer mehr Baeume.

Zitat #1555 ;-)

Mein Projekt ist mittels htaccess so konfiguriert, dass alle js-Anfragen automatisch auf ein bestimmtes Verzeichnis gemapped werden. D.h. ein einfaches example.org/php.js fuehrt zu example.org/gui/js/php.js

Das heißt, eine eventuelle Verzeichnisangabe wird ignoriert. Hmm, der Sinn will mir nicht einleuchten. Aber wenn du meinst ...

Die php.js-Datei bekommt beim Einbinden im HTML-Header einen Parameter uebergeben
  <script src="php.js?lang=en" type="text/javascript"></script>
Rufe ich die Datei testhalber auf wie folgt
http://example.org/php.js?lang=en
so kann ich wunderbar auf den lang-Parameter mittels $_GET['lang'] zugreifen.

Works as expected.

Nun mein Problem.
Fuehre ich das ganze jedoch im Kontext der Seite aus - sprich, wenn ich zb die index.html aufrufe (also nicht die direkte Adresse zum Js-File in der Adresszeile), so habe ich den Zustand, dass mir der Parameter nicht zu Verfuegung steht.

Most unexpected. Das ist überhaupt nicht einzusehen.
Hast du kontrolliert, dass der Request, mit dem das Script angefordert wird, derselbe ist wie beim Aufruf "von Hand"? Vor allem, dass der URL-Parameter tatsächlich übermittelt wird? (Diagnosemöglichkeiten: LiveHTTP Extension, Firebug, Server Log)

Ein Gedanke ist der, dass es vielleicht daran liegen koennte, dass sich der Aufruf von $_GET in der php.js auf den QueryString der gesamten Seite bezieht, und nicht auf die Parameter, welche ich der Datei beim Include mit uebergeben habe.

Nein. Das läuft doch serverseitig ab. Der Webserver (bzw. der PHP-Interpreter) weiß nichts davon, dass der aktuelle Request irgendwas mit einer HTML-Ressource zu tun hat, die irgendwann vorher abgerufen wurde (wenn nicht zufällig jemand den Referer auswertet). Ein Zusammenhang könnte höchstens entstehen, wenn noch ein Cookie mitspielt. Das hat aber mit den GET-Parametern nichts zu tun.

Ein weiterer Gedanke ist der, dass ich vielleicht etwas in der htaccess falsch eingestellt habe (Siehe Punkt 1), so dass der QueryString bei Reweiten abhanden kommt.

Dann würde er aber ebenso beim Aufruf von Hand unter den Tisch fallen. Allerdings fehlt der Rewrite-Rule tatsächlich das QSA-Flag, mit dem der Query-String weitergeschleift wird. Das hättest du aber bei den Einzeltests vorab auch feststellen müssen.
Anyway: Um Denkfehler im Rewriting auszuschließen, lass das erstmal weg und binde das Script über seinen echten Pfad ein. Wenn's dann klappt, wissen wir, dass wir beim Rewriting ansetzen müssen.

So long,
 Martin

--
"Hier steht, deutsche Wissenschaftler hätten es im Experiment geschafft, die Lichtgeschwindigkeit auf wenige Zentimeter pro Sekunde zu verringern." - "Toll. Steht da auch, wie sie es gemacht haben?" - "Sie haben den Lichtstrahl durch eine Behörde geleitet."