Mod_Rewrite probleempje

Status
Niet open voor verdere reacties.

ErikBooy007

Terugkerende gebruiker
Lid geworden
24 mei 2007
Berichten
3.814
Goedemiddag allen!

Ik zou met mod_rewrite graag het volgende willen realiseren:

Code:
http://www.domein.nl/var1/value1/var2/value2/var3/value3

rewriten naar:

Code:
http://www.domein.nl?var1=value1&var2=value2&var3=value3

Dit bij een onbekend aantal variabelen. Dat kan er 1 zijn, dat kunnen er 0 zijn, maar het kunnen er ook 15 zijn... Bij wijze van spreken.

Hoe schrijf ik een rewrite_rule die die url voor mij herschrijft, ongeacht het aantal variabelen in de request?

Bij voorbaat dank!
 
Dank voor je reactie, maar het is niet precies wat ik zoek...

In jouw voorbeeld ga je uit van een vast aantal variabelen (1,2 of 3) ik wil met een onbepaald aantal variabelen kunnen werken... Waarbij na de eerste slash een variabele-naam komt, daarna een value, daarna een tweede variabele-naam, etc...
 
Waarschijnlijk gaat het sneller door een explode op de / te gebruiken :)
Gebeurd dacht ik ook vaak in framework-routers.

Dan zou je eventueel zelfs ook de vars weg kunnen laten.
In frameworks heb je vaak (dan wel niet altijd) deze structuur (In ieder geval MVC, wat de meeste zijn)
Code:
http://www.domein.nl/controller/action/parameter1/parameter2/parameter3
 
Hartelijk dank!

Maar het gaat om allemaal verschillende pagina's, die allemaal verschillende paramaters nemen, die veelal niet verplicht zijn. Als ik dan de var-naam weglaat, heb ik geen manier om te zien wat een bepaalde waarde eigenlijk vertegenwoordigt.

Wat eigenlijk de bedoeling is (voorbeeld is voor een fixed aantal vars):

Code:
RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/ $1.php?$2=$3&$4=$5&$6=$7
RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/ $1.php?$2=$3&$4=$5
RewriteRule ^(.*)/(.*)/(.*)/ $1.php?$2=$3
RewriteRule ^(.*)/ $1.php

En ik kan wel gewoon deze regel nog 10 keer kopieren, maar dat is ook geen nette oplossing lijkt me.

Het hele MVC-gebeuren heb ik nog weinig kaas van gegeten en het is dus wel safe to say dat m'n project daar niet aan voldoet... ;)

[EDIT]
Overigens werkt bovenstaande code helemaal niet ;)
[/EDIT]
 
Laatst bewerkt:
Tijd om MVC te gaan proberen :p

Maar je kunt ook gewoon de vars meegeven :)
Dan moet je alleen even een functie er op los laten wat uiteindelijk een array(var1 => val1, var2 => val2) oplevert.
Zal iets moet "i % 2" worden ;)
 
Maar hoe bedoel je dat nou precies? Een functie in m'n PHP erop loslaten? Want ik had eigenlijk gehoopt dat het mogelijk zou zijn om middels de rewrite-engine de variabelen kant en klaar in PHP te kunnen krijgen... ;)

Ik zal eens zien of ik het in PHP voor elkaar kan krijgen! :)
 
Omdat het een variabel aantal is lijkt het mij lastig via mod_rewrite op te lossen.

Via PHP kun je gewoon een array laten genereren.
CMS hier heeft dit in een .htaccess
Code:
RewriteRule ^(.*)$   index.php?path=/$1 [L]
Vervolgens gaat de Router-klasse aan de gang met $_GET['path']

URL zien er zo uit bijvoorbeeld:
Code:
http://www.domein.nl/leden/
Dan wordt de klasse LedenController aangeroepen en omdat de 2e parameter leeg is pakt ie standaard de methode "index()"

Maar bij deze url
Code:
http://www.domein.nl/leden/show/1
gaat ie naar de methode "show()" in de LedenController en geeft als $parameter[0] een 1 die je dan vervolgens in een query kunt gebruiken :)
 
Heya,


Ik nam aan dat je zelf al lekker had rondgezocht op de internets. Kwam dit tegen maar dat was niet echt een goed antwoord.

Anyway, met mijn redelijke (okay, sure, 'niet zo heel goede') kennis van htaccess kan ik verder ook niets verzinnen.

Zoals Tha Devil zei, het is misschien makkelijker met php te doen. Je schrijft alle requests om naar een file met een bepaalde query string (zoals, in het voorbeeld $_GET['path']) en deze explode je dan maar (hey, dat is maar 1 regel php!).



:thumb:
 
Heb het nu als volgt opgelost:

1. Multiviews aangezet.
2. De volgende code op elke pagina aanroepen:

PHP:
if ( $_SERVER[ 'PATH_INFO' ][ strlen ( $_SERVER[ 'PATH_INFO' ] ) - 1 ] == '/' ) {
    $_SERVER[ 'PATH_INFO' ] = substr ( $_SERVER[ 'PATH_INFO' ], 0, strlen ( $_SERVER[ 'PATH_INFO' ] ) - 1 );
} 
		
$vars = explode ( '/', substr ( $_SERVER[ 'PATH_INFO' ], 1 ) );
			
for ( $i = 0; $i < count ( $vars ); $i += 2 ) {
				
    $_GET[ $vars[ $i ] ] = $vars[ $i + 1 ];
				
}

Lijkt goed te werken.

[EDIT]
Huh, jullie laatste reacties niet gezien. Ga ik nu bekijken :)
[/EDIT]

[EDIT]
Heb nu dus een scriptje dat wel wat lijkt op dat van Tha Devil (hoewel ik dus puur de variabelen extract en verder niet met controllers werk) en dat werkt op zich goed.
That Guy, ook hartelijk dank voor je reactie. Ik explode inderdaad en daarmee krijg ik de data waar ik het hebben wil.

Thanks, allebei!
[/EDIT]
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan