You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-de@httpd.apache.org by Georg Markus Dittrich <go...@yahoo.de> on 2002/11/19 17:29:21 UTC

mod_rewrite f. PHP skripte, soll mit sessions und encoded vars funktionieren ...

hallo,

sitze jetzt schon seit ewigkeiten an folgendem problem und freue mich über jegliche hilfe (Apache 1.3 neueste version auf redhat linux):

Ich verwende folgende RewriteRule:

^([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)\.html $1\.php?category=$2\&item=$3\&shop_lang=$4\&type=$5

für URL´s mit dem muster http://www.maskworld.com.exxs.net/display-department_152_0_german_beard.html 

und sie in das muster http://www.maskworld.com.exxs.net/display-department.php?category=152&item=0&shop_lang=german&type=beard 

umzuwandeln. so sieht es so aus als würden statische seiten aufgerufen werden -> suchmaschinen. 

Um aber sessions ohne cookies und die weitergabe der sessiondaten per url-encode zu ermöglichen, wollte ich die rule eigentlich so verwenden (weil ja php dann automatisch hinter xxxx.html per fragezeichen die sessionid und die urlencodes ranghängt):

RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)\.html\??(.*) $1\.php?category=$2\&item=$3\&shop_lang=$4\&type=$5\&$6

nur funktioniert sie nicht. Der hase liegt im fragezeichen begraben, welches ja den start des php variablenblocks anzeigt, also des query_strings. Da ich aber die url ja selbst schon rewrite habe ich ja schon hinter dem skriptnamen das fragezeichen in meiner rewriteten url. Deshalb versuche ich jetzt mit der rewrite rule das fragezeichen herauszufiltern, und die restlichen variablen (was auch immer da kommen mag) hinten nach einem weiteren &-Zeichen anzuhängen ($6).

Allerdings scheint mod_rewrite da ein generelles problem mit den fragezeichen bzw. deren erkennung zu haben. Eigentlich müsste man das ? escapen (also -> \?), das zweite ? ist dann als 0 oder 1 gedacht (also für den fall, daß sessionid da ist oder eben auch nicht) - funktioniert auch nicht in geschweiften klammern.

Anhand der logs konnte ich jetzt absehen, daß egal wie man die rule definiert der server bei url aufrufen wie z.b. http://www.maskworld.com.exxs.net/display-department_152_0_german_beard.html?shit=5 den rewrite mit der uri http://www.maskworld.com.exxs.net/display-department_152_0_german_beard.html initialisiert. Es wird also alles hinter dem fragezeichen ignoriert? Warum das denn? Warum ist sowas nirgendwo dokumentiert? Bzw. kannst ich das beeinflussen? Es muss doch machbar sein, daß php seine zusätzlichen variablen hinten dranhängen kann; OT: könnte man alternativ php dazu überreden als variablenabgrenzer hinter der .php endung der files ein & zu akzeptieren? /OT Und würde das dann vom server/mod_rewrite nicht ignoriert?

wie ihr seht, habe ich mich schon eine weile damit beschäftigt, aber ich komme da nicht weiter - any help is greatly appreciated. 

vielen dank - gorg.



---------------------------------
Gesendet von http://mail.yahoo.de.
3,5% Zinsen ab dem 1. EUR. Das Tagesgeldkonto mit den besten ZinsenTäglich verfügbar.
 Kostenlose Kontoführung. Jetzt eröffnen! Extrakonto bei der DiBa.

Re: mod_rewrite f. PHP skripte, soll mit sessions und encoded vars funktionieren ...

Posted by Michael Wallner <m....@iworks.at>.
Michael Wallner schrieb:

> Hi,
> 
> vielleicht nicht ganz die Antwort, die du dir
> erhofft hast, aber zumindest ein alternativer
> Vorschlag:

und noch einer...

RewriteRule ... \&%{QUERY_STRING}

HTH,
Michael

-- 
IWORKS <http://iworks.at/>   | |   Michael WALLNER
webdesign & webdevelopment   | |   Hauptstrasse 26
websites & webapplications   | |   A-7033 Poettsching
<:m...@iworks.at>   | |   +43 676 63 73 956


Re: mod_rewrite f. PHP skripte, soll mit sessions und encoded vars funktionieren ...

Posted by Michael Wallner <m....@iworks.at>.
Georg Markus Dittrich schrieb:
> hallo,

Hi,

vielleicht nicht ganz die Antwort, die du dir
erhofft hast, aber zumindest ein alternativer
Vorschlag:

Nimm alles:                          \.html(.*)$
füg es in einer extra Variablen an:  \&qstr=$6

Den zusätzlichen Query-String im php-File parsen:

parse_str(substr($_GET['qstr'],1), $add);

Somit sind alle zusatzlichen Parameter und Werte
im Array $add.

----SESSION START----
$sn = session_name();
if(isset($add[$sn])){
   session_id($add[$sn]);
}
session_start();
---------------------

AFAIK kann man das ? als Begrenzung für den
Query-String nicht verändern.


Für die Rewrite-Rule hätt' ich nur diesen Vorschlag:

Schon versucht, das fragliche Fragezeichen in eckige
Klammern zu setzen?

Michael


-- 
IWORKS <http://iworks.at/>   | |   Michael WALLNER
webdesign & webdevelopment   | |   Hauptstrasse 26
websites & webapplications   | |   A-7033 Poettsching
<:m...@iworks.at>   | |   +43 676 63 73 956