PDA

Bekijk Volledige Versie : Ook 'gewone' GET-variabelen doorgeven met RewriteRule



Maarten Wierda
09/12/05, 14:15
Hoi n.i.w.s-s-lezers,

Middels een .htaccess-bestand heb ik de RewriteEngine van Apache
geactiveerd en biedt ik de bezoeker zodoende 'gebruiksvriendelijke'
uri's, je kent 't wel. De 'rules' die hiervoor gebruik, zijn
voortgekomen uit eerdere draadjes die ik over dit onderwerp ben begonnen
hier in n.i.w.s-s.

Wanneer ik de volgende 'rule' heb (da's e1n regel)...

RewriteRule ^mail-deze-pagina/?$

/index.php?pg=mail-deze-pagina

.... en ik maak een uri die er als volgt uitziet:

/mail-deze-pagina/

... verwijst dit keurig naar 'index.php?pg=mail-deze-pagina'.

Maar... wanneer ik een uri maak die er zo uitziet:

/mail-deze-pagina/?foo=bar

.... wordt de GET-variabele 'foo' niet doorgegeven, logisch ook -geloof
ik- want dan /matcht/ de uri niet met de rule die ik heb opgesteld. Maar
hoe kan ik ervoor zorgen dat ik deze GET-variabelen wél doorkrijg in m'n
php-bestand?

Ik heb '^mail-deze-pagina/([^/]*)/?$' geprobeerd, maar dit werkt niet,
ik krijg dan niks door. Voor de volledigheid, dit is dan de complete
regel die ik gebruik (da's wederom e1n regel):

RewriteRule ^mail-deze-pagina/([^/]*)/?$

/index.php?pg=mail-deze-pagina&subpg=$1

Weet iemand hoe ik ervoor kan zorgen dat ook 'gewone' GET-variabelen
doorgegeven worden?

--
Cheers,
Maarten Wierda

Rene Pijlman
09/12/05, 16:30
Maarten Wierda:
>Weet iemand hoe ik ervoor kan zorgen dat ook 'gewone' GET-variabelen
>doorgegeven worden?

Ik denk dat je dit kunt gebruiken:

"You can even create URLs in the substitution string containing a query
string part. Just use a question mark inside the substitution string to
indicate that the following stuff should be re-injected into the
QUERY_STRING. When you want to erase an existing query string, end the
substitution string with just the question mark."

"'qsappend|QSA' (query string append)
This flag forces the rewriting engine to append a query string part in the
substitution string to the existing one instead of replacing it. Use this
when you want to add more data to the query string via a rewrite rule."

http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

--
René Pijlman

Wat wil jij worden? http://www.carrieretijger.nl

Maarten Wierda
09/12/05, 16:45
Rene Pijlman wrote:

>> Weet iemand hoe ik ervoor kan zorgen dat ook 'gewone'
>> GET-variabelen doorgegeven worden?
>
> Ik denk dat je dit kunt gebruiken:

<snip>

> "'qsappend|QSA' (query string append) This flag forces the rewriting
> engine to append a query string part in the substitution string to
> the existing one instead of replacing it. Use this when you want to
> add more data to the query string via a rewrite rule."
>
> http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

Ik heb er nu dit van gemaakt:

RewriteRule ^mail-deze-pagina/?$
/index.php?pg=mail-deze-pagina [R,QSA]

Dit zorgt er voor dat:

/mail-deze-pagina/?foo=bar

....wordt doorgestuurd naar...

index.php?pg=mail-deze-pagina&foo=bar

Echter, in de adresbalk wordt mijn oh zo mooie uri nu ook vervangen, en
dat wil ik eigenlijk niet! Maar daar hoor ik zelf wel uit te komen als
ik de..

[Maarten denkt nog even na, en haalt de R uit de /flag/ weg...]

Het werkt! Vriendelijk bedankt, René!

--
Cheers,
Maarten Wierda