Ajax - URL rewrite
Mark
- https
Hallo,
und zwar hab ich folgendes Problem. Ich lasse mir durch die .htaccess die Ordnerstruktur in der URL als Querystring anhängen.
Also wenn ein Besucher http://www.example.com/seite1/ eintippt, wird mein Script mit http://www.example.com/?qs1=seite1 aufgerufen.
Das funktioniert soweit einwandfrei. Nur in einem Fall funktioniert es nicht richtig und zwar wenn man die URL mit wget oder mit Ajax aufruft. In der AccessLog wird der Request ganz normal protokoliert, jedoch wird meinem Script der Querystring qs1=seite1 nicht übergeben.
Es geht gerade um einen Response den ich von einem anderen Server bekomme. Kommt der Response vom diesem Server, weiß mein Script nicht was es tun soll, da der Querystring qs1=seite1 fehlt. Wenn ich genau die gleiche URL im Browser eingebe funktioniert alles einwandfrei.
Die folgende Zeile in der .htaccess ist dafür zuständig, dass der erste Ordner als qs1 übergeben wird:
RewriteRule ^([^/]+)/$ /?qs1=$1 [QSA,L]
Kennt jemand eine Möglichkeit wie ich dieses Problem mit dem Rewrite lösen könnte?
Google konnte mir diesmal gar nicht helfen.
mfg
Mark
Hi,
und zwar hab ich folgendes Problem.
der Satz davor, auf den sich das "und zwar" wohl bezieht, ist leider verlorengegangen.
Ich lasse mir durch die .htaccess die Ordnerstruktur in der URL als Querystring anhängen.
Also wenn ein Besucher http://www.example.com/seite1/ eintippt, wird mein Script mit http://www.example.com/?qs1=seite1 aufgerufen.
Das funktioniert soweit einwandfrei. Nur in einem Fall funktioniert es nicht richtig und zwar wenn man die URL mit wget oder mit Ajax aufruft. In der AccessLog wird der Request ganz normal protokoliert, jedoch wird meinem Script der Querystring qs1=seite1 nicht übergeben.
Das klingt nicht logisch - es sei denn, da findet ein Redirect anstatt eines internen Rewritings statt. Bei wget kann man mit dem Schalter --max-redirects angeben, ob man Redirects folgen möchte, und wieviele maximal in Folge. Bei einem AJAX-Request weiß ich nicht, ob selbst den Status auswerten (301 oder 302) und den Location-Header reaussuchen muss, oder ob das XHR-Objekt das selbst tut.
Bei einem reinen server-internen Rewriting ist es aber egal, woher der Request kam, weil es nach außen nicht erkennbar ist.
Die folgende Zeile in der .htaccess ist dafür zuständig, dass der erste Ordner als qs1 übergeben wird:
RewriteRule ^([^/]+)/$ /?qs1=$1 [QSA,L]
Diese Regel matcht aber IMO nie, denn der Request beginnt immer mit einem '/', du forderst aber am Anfang des Ausdrucks mindestens ein Zeichen, das kein '/' ist. Also muss da noch etwas anderes sein, was dann wirksam wird.
Ciao,
Martin
Hi,
und zwar hab ich folgendes Problem.
der Satz davor, auf den sich das "und zwar" wohl bezieht, ist leider verlorengegangen.
Ich lasse mir durch die .htaccess die Ordnerstruktur in der URL als Querystring anhängen.
Also wenn ein Besucher http://www.example.com/seite1/ eintippt, wird mein Script mit http://www.example.com/?qs1=seite1 aufgerufen.
Das funktioniert soweit einwandfrei. Nur in einem Fall funktioniert es nicht richtig und zwar wenn man die URL mit wget oder mit Ajax aufruft. In der AccessLog wird der Request ganz normal protokoliert, jedoch wird meinem Script der Querystring qs1=seite1 nicht übergeben.Das klingt nicht logisch - es sei denn, da findet ein Redirect anstatt eines internen Rewritings statt. Bei wget kann man mit dem Schalter --max-redirects angeben, ob man Redirects folgen möchte, und wieviele maximal in Folge. Bei einem AJAX-Request weiß ich nicht, ob selbst den Status auswerten (301 oder 302) und den Location-Header reaussuchen muss, oder ob das XHR-Objekt das selbst tut.
Bei einem reinen server-internen Rewriting ist es aber egal, woher der Request kam, weil es nach außen nicht erkennbar ist.
Finde auch dass es nicht logisch ist, da es ja eben kein Redirect, sondern ein interner Rewrite ist. Aber aus irgendeinem Grund wird dieser Rewrite nicht richtig ausgeführt sobald man mit Ajax oder wget einen Request oder Response bekommt. Ich habe es bei Ajax bis jetzt immer so gelöst, dass ich den Querystring qs1=seite1 immer als Parameter direkt übergeben habe.
Die folgende Zeile in der .htaccess ist dafür zuständig, dass der erste Ordner als qs1 übergeben wird:
RewriteRule ^([^/]+)/$ /?qs1=$1 [QSA,L]Diese Regel matcht aber IMO nie, denn der Request beginnt immer mit einem '/', du forderst aber am Anfang des Ausdrucks mindestens ein Zeichen, das kein '/' ist. Also muss da noch etwas anderes sein, was dann wirksam wird.
Ja, das hatte ich heute auch schon in Verdacht. Hätte mir vorstellen können, dass es beim Browseraufruf evtl. auch so funktioniert und wenn man den Request über Ajax oder wget macht, dass es eben nicht funktioniert. Habe es jetzt mit einem Slash voran getestet. Leider funktioniert es dann gar nicht mehr. In den Foren bzw. Tutorials steht es auch immer ohne den Slash am Anfang.
Ciao,
Martin
Ok, hat sich erledigt. Ich habe mir den Rewrite-Log ausgeben lassen und gesehen, dass der auch bei Ajax- oder wget-Requests den Querystring richtig anhängt. Letztendlich lag es an meinem Script selbst, da es geprüft hat, ob der User eingeloggt ist. Aus diesem Grund hat es auch immer funktioniert wenn ich den Link im Browser eingegeben habe, da ich eingeloggt war.
Danke.
mfg
Mark