Archief - url rewrite - vraagje omzetten url in rewriterule

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

sarnath

Legacy Member
Ik heb een vraag over de omzetten van de rewriterule naar een url:

als ik typ: http://website.be/test/?page=3
krijg ik als resultaat: param 1 = param 2 = page = 3

als ik typ: http://website.be/test/test/1/&page=3
krijg ik als resultaat: param 1 = test param 2 = 1 page =

De rules hiervoor zijn:
RewriteRule ^test/$ test.php
RewriteRule ^test/([a-zA-Z0-9_-]+)/$ test.php?param1=$1
RewriteRule ^test/([a-zA-Z0-9_-]+)/([0-9]+)/$ test.php?param1=$1&param2=$2

Voor de eerste test gaat hij dus omvormen naar test.php?page=3 wat dus als pagina parameter 3 geeft en de eerste twee parameters zijn er dus niet..
Voor de tweede test veronderstel ik dus dat hij omvormt naar test.php?param1=test&param2=1&page=3, maar dit werkt dus niet voor page.

Mijn vraag is dus, waarom doet hij dit voor de eerste regel wel en voor de tweede niet?

PS, het gaat me er niet om dat dit niet echt de correcte werkwijze is, ik vraag me gewoon af waarom hij dit voor de eerste regel wel doet en voor de laatste niet.

adrianhates

Legacy Member
RewriteRule ^test/([a-zA-Z0-9_-]+)/$ test.php?param1=$1
RewriteRule ^test/([a-zA-Z0-9_-]+)/([0-9]+)/$ test.php?param1=$1&param2=$2

Ik denk dat ge met de tweede regel uw regex overschrijft van de eerste regel.

Volgens mij moet je de eerste regel wegdoen en moet je het testing niveau terugbrengen naar php.

In test.php moet je dus gaan kijken of die url variables ingevuld zijn of niet en uw script daar naar laten gedragen.

Ik heb gisteren nog een gelijkaardig probleem gehad en zo heb ik het uiteindelijk opgelost.

Grtz

sarnath

Legacy Member
Als ik enkel de tweede regel in mijn .htaccess zet, dus:
RewriteRule ^test/([a-zA-Z0-9_-]+)/([0-9]+)/$ test.php?param1=$1&param2=$2

en dan de url ingeef: http://website.be/test/eerste/2/&page=3 dan krijg ik echt een 404 fout.
als ik &page=3 weglaat print hij wel dat de eerste parameter gelijk is aan "eerste" en de tweede "2".

Ik kijk in ieder geval of parameter 1,2 en de page parameter zijn ingevuld in mijn test.php.

Ik heb het in ieder geval opgelost met RewriteRule ^test/([a-zA-Z0-9_-]+)/([0-9]+)/([0-9]+)/$ test.php?param1=$1&param2=$2&page=$3

Het is gewoon dat ik niet snap waarom hij deze page parameter niet pakt en dit bij de simpele eerste rewriterule wel gaat. (dus /test/?page=2 via de rule RewriteRule ^test/$ test.php)

Curahee Q

Legacy Member
Je kan eigenlijk veel beter dit gebruiken

Code:
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^ index\.php [L]

In php kan je dan alle delen van de url als volgt ophalen

<?php
echo '<p>' . $_SERVER['REQUEST_URI'] . '</p>';

$urlParts = explode( '/', trim( $_SERVER['REQUEST_URI'], '/' ) );
echo '<pre>' . print_r( $urlParts, true ) . '</pre>';
?>
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan