Frage zu Rewrite

Hallo,

folgender URI-Request wird an den Server geschickt:
http://myserver.mydomain/login.html?userid=123

und soll wiefolgt an PHP ausgeliefert werden
http://myserver.mydomain/index.php?siteid=login&userid=123

Der (Un-)Sinn dieser Problematik sei mal dahingestellt. Mir gehts um's
Verständnis.

Mit folgender RewriteRule habe ich es probiert:
RewriteRule ^([^\.]+)\.html\?(.*)$ index.php?siteid=$1&$2

leider wird laut Rewrite-Log lediglich die URI bis .html verarbeitet. Es
kommt also das raus:
http://myserver.mydomain/index.php?siteid=login&

der Query-String wird nicht im Rewrite nicht berücksichtigt. Kann das
jemand bestätigen?
Gibt es eine Möglichkeit den gesamten URI per RewriteRule zu manipulieren?

Danke die Hilfe

ciao

Ulf
Ulf Seltmann [ Di, 23 Oktober 2007 14:39 ] [ ID #1852571 ]

Re: Frage zu Rewrite

On 23 Okt., 14:39, Ulf Seltmann <ulf.seltm... [at] googlemail.com> wrote:
> Hallo,
>
> folgender URI-Request wird an den Server geschickt:http://myserver.mydoma=
in/login.html?userid=3D123
>
> und soll wiefolgt an PHP ausgeliefert werdenhttp://myserver.mydomain/inde=
x=2Ephp?siteid=3Dlogin&userid=3D123
>
> Der (Un-)Sinn dieser Problematik sei mal dahingestellt. Mir gehts um's
> Verständnis.
>
> Mit folgender RewriteRule habe ich es probiert:
> RewriteRule ^([^\.]+)\.html\?(.*)$ index.php?siteid=3D$1&$2
>
> leider wird laut Rewrite-Log lediglich die URI bis .html verarbeitet. Es
> kommt also das raus:http://myserver.mydomain/index.php?siteid=3Dlogin&
>
> der Query-String wird nicht im Rewrite nicht berücksichtigt. Kann das
> jemand bestätigen?
> Gibt es eine Möglichkeit den gesamten URI per RewriteRule zu manipulier=
en?
>
> Danke die Hilfe
>
> ciao
>
> Ulf


> http://myserver.mydomain/login.html?userid=3D123

Mhm, ich bin mir nicht sicher, ob das überhaupt funktioniert:

Soweit ich mich da an meine Erfahrungen erinnere, war es (mir
zumindest)
nicht möglich, bei eingeschaltete mod_rewrite und den entsprechenden
Rewrite Rules noch zusätzliche $_GET Variablen zu bekommen...

Lass mich aber gerne belehren ....

Markus
markus.libers [ Di, 23 Oktober 2007 14:44 ] [ ID #1852572 ]

Re: Frage zu Rewrite

markus.libers [at] googlemail.com schrieb:
> On 23 Okt., 14:39, Ulf Seltmann <ulf.seltm... [at] googlemail.com> wrote:
>> Hallo,
>>
>> folgender URI-Request wird an den Server geschickt:http://myserver.mydomain/login.html?userid=123
>>
>> und soll wiefolgt an PHP ausgeliefert werdenhttp://myserver.mydomain/index.php?siteid=login&userid =123
>>
>> Der (Un-)Sinn dieser Problematik sei mal dahingestellt. Mir gehts um's
>> Verständnis.
>>
>> Mit folgender RewriteRule habe ich es probiert:
>> RewriteRule ^([^\.]+)\.html\?(.*)$ index.php?siteid=$1&$2
>>
>> leider wird laut Rewrite-Log lediglich die URI bis .html verarbeitet. Es
>> kommt also das raus:http://myserver.mydomain/index.php?siteid=login&
>>
>> der Query-String wird nicht im Rewrite nicht berücksichtigt. Kann das
>> jemand bestätigen?
>> Gibt es eine Möglichkeit den gesamten URI per RewriteRule zu manipulieren?
>>
>> Danke die Hilfe
>>
>> ciao
>>
>> Ulf
>
>
>> http://myserver.mydomain/login.html?userid=123
>
> Mhm, ich bin mir nicht sicher, ob das überhaupt funktioniert:
>
> Soweit ich mich da an meine Erfahrungen erinnere, war es (mir
> zumindest)
> nicht möglich, bei eingeschaltete mod_rewrite und den entsprechenden
> Rewrite Rules noch zusätzliche $_GET Variablen zu bekommen...

Ich habe gesehen, dass zumindest bei den mit 'RewriteCond' auswertbaren
Variablen %{QUERY_STRING} zur Verfügung steht. Somit liegt es für mich
nicht fern, diese Ressource auch 'RewriteRule' zur Verfügung zu stellen,
optimalerweise durch ein Flag.
Ulf Seltmann [ Di, 23 Oktober 2007 14:49 ] [ ID #1852573 ]

Re: Frage zu Rewrite

Ulf Seltmann wrote:
> Hallo,
>
> folgender URI-Request wird an den Server geschickt:
> http://myserver.mydomain/login.html?userid=123
>
> und soll wiefolgt an PHP ausgeliefert werden
> http://myserver.mydomain/index.php?siteid=login&userid=123
>
> Der (Un-)Sinn dieser Problematik sei mal dahingestellt. Mir gehts um's
> Verständnis.
>
> Mit folgender RewriteRule habe ich es probiert:
> RewriteRule ^([^\.]+)\.html\?(.*)$ index.php?siteid=$1&$2
>
> leider wird laut Rewrite-Log lediglich die URI bis .html verarbeitet. Es
> kommt also das raus:
> http://myserver.mydomain/index.php?siteid=login&
>
> der Query-String wird nicht im Rewrite nicht berücksichtigt. Kann das
> jemand bestätigen?

AFAIR heisst dein Stichwort "QSA".

> Gibt es eine Möglichkeit den gesamten URI per RewriteRule zu manipulieren?

Da bin ich mir nciht sicher, aber mit übertragen geht.

regards,
Jens
Jens Himmelrath [ Di, 23 Oktober 2007 15:13 ] [ ID #1852575 ]

Re: Frage zu Rewrite

Ulf Seltmann schrieb:

> folgender URI-Request wird an den Server geschickt:
> http://myserver.mydomain/login.html?userid=123
>
> und soll wiefolgt an PHP ausgeliefert werden
> http://myserver.mydomain/index.php?siteid=login&userid=123
>
> Mit folgender RewriteRule habe ich es probiert:
> RewriteRule ^([^\.]+)\.html\?(.*)$ index.php?siteid=$1&$2
>
> der Query-String wird nicht im Rewrite nicht berücksichtigt. Kann das
> jemand bestätigen?

Jein ;-):
Im Pattern der Rule kannst du auf alles zwischen (und exclusive) Servername
(Port) und Querystring zugreifen. Also nur auf die Pfadkomponente einer URI.
In der Substitution kannst du dann den Querystring komplett neu
setzen/löschen oder Werte hinzufügen. Ansonsten wird er unverändert
übernommen.
Musst du mit dem orginalen QueryString "arbeiten", dann musst du das in
einer Condition machen und kannst über Backreferenzen darauf zugreifen.

In der Documentation zu RewriteRule [1] findest du dazu die Hinweiskästen
"What is matched?" und "Modifying the Query String".

(BTW gehört das wohl eher in eine Webservergruppe.)

xpost&fup2 de.comm.software.webserver

Gruß
Carsten

[1] http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewrit erule
Carsten Wiedmann [ Di, 23 Oktober 2007 15:28 ] [ ID #1852578 ]

Re: Frage zu Rewrite

Jens Himmelrath schrieb:
> Ulf Seltmann wrote:
>> Mit folgender RewriteRule habe ich es probiert:
>> RewriteRule ^([^\.]+)\.html\?(.*)$ index.php?siteid=$1&$2
>>
>> leider wird laut Rewrite-Log lediglich die URI bis .html verarbeitet.
>> Es kommt also das raus:
>> http://myserver.mydomain/index.php?siteid=login&
>>
>> der Query-String wird nicht im Rewrite nicht berücksichtigt. Kann das
>> jemand bestätigen?
>
> AFAIR heisst dein Stichwort "QSA".

Tatsächlich. Damit lässt sich das Problem lösen. das Flag [qsa] bewirkt,
dass der Query-String an den manipulierten URI angehängt wird.

RewriteRule ^([^\.]+)\.html$ index.php?siteid=$1 [qsa]

führt zu dem gewünschten Ergebnis. Man beachte, dass der String auch
nach .html zu Ende ist ($)

ciao

ulf
Ulf Seltmann [ Di, 23 Oktober 2007 15:43 ] [ ID #1852580 ]

Re: Frage zu Rewrite

markus.libers [at] googlemail.com schrieb:
> Lass mich aber gerne belehren ....

der Vollständigkeit halber hier mal noch die Version der RewriteRule
ohne [qsa] Flag

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([^\.]+)\.html$ index.php?siteid=$1&%1

Man kann auch auf RewriteCond-Matchings über Variablen zugreifen.
Funktioniert :)

ciao

ulf
Ulf Seltmann [ Di, 23 Oktober 2007 15:56 ] [ ID #1852583 ]
PHP » de.comp.lang.php.misc » Frage zu Rewrite

Vorheriges Thema: switch
Nächstes Thema: PHP5 - Skipt in Array und switch case