Return to mainpageTBForum nu ook op je mobiel!
Klik hier voor meer info en gratis link...

Home New Sell & Buy Forums Articles Company guide Search

   Stefan van Elsas, Private person
2 jul 2006 14:55 
Waarvoor gebruik je de Apache RewriteEngine?
De RewriteEngine wordt gebruikt om een URL te manipuleren gebaseerd op een “Reguliere Expressie” verder in dit document naar verwezen als “regexp”. Met behulp van de RewriteRule en een regexp kan ongeveer alles met een URL gedaan worden.


Voorbeelden & uitleg

1. Simpel voorbeeld waarbij zoeken.html herschreven wordt tot index.php?p=zoeken

Code

#De RewriteEngine aan zetten
RewriteEngine On

#De RewriteRule
RewriteRule ^zoeken.html$ index.php?p=zoeken [L]


Uitleg RewriteRule
RewriteRule ^zoeken\.html$ index.php?p=zoeken [L]

• ^: Het ^ duidt aan dat zoeken.html aan het begin van de URL moet beginnen ( dit is natuurlijk achter je base, wat in principe neerkomt op de plaats waar je .htaccess bestand staat )
• $: Het $ teken duidt aan dat zoeken.html ook aan het eind van de URL moet eindigen.
• \.: De punt wordt hier “ge-escaped” omdat de punt een speciaal karakter is, alle speciale karakters moeten “ge-escaped” worden.

Algemeen RewriteRule
De RewriteRule bestaat altijd uit 2 delen, de regexp, in dit geval “^zoeken\.html$” en de url waarnaar de regexp herschreven moet worden, in dit geval “index.php?p=zoeken” en is gescheiden door middel van een spatie. [L] is een mogelijke flag, en kan ook weggelaten worden. [L] zorgt ervoor dat de URL niet verder geparsed wordt na deze RewriteRule (mits de url matched met de regexp).

Mogelijke aanroep
Stel dat de gebruiker nu naar (Log in to see link!) gaat, dan zal de pagina (Log in to see link!) getoond worden. De URL in de URL-balk blijft wel gewoon (Log in to see link!) .

Een aanroep naar (Log in to see link!) zal niet herschreven worden,omdat zoeken.html niet aan het begin van de URL ( na de base ) begint.


2. Simpel voorbeeld waarbij we gebruik maken een karakterset.

Code

#De RewriteEngine aan zetten
RewriteEngine On

#De RewriteRule
RewriteRule ^[0-9]\.html$ index.php?p=numerieke_url [L]


Uitleg RewriteRule
RewriteRule ^[0-9]\.html$ index.php?p=numerieke_url [L]

• ^ en $ en \.: Zie voorbeeld 1.
• [ en ] : Het karakter [ duidt het begin van een karakter set aan en het karakter ] duidt het einde aan.
• 0-9: 0-9 betekent de reeks getallen van 0-9, dus 0,1,2,3,4,5,6,7,8 en 9.

Mogelijke aanroep
(Log in to see link!) zal herschreven worden naar (Log in to see link!) .

(Log in to see link!) zal niet herschreven worden, omdat de URL na de base niet alleen uit de nummers 0-9 bestaat, maar ook letters bevat.

Ook de url (Log in to see link!) zal niet herschreven worden, omdat een karakterset maar voor 1 enkel karakter telt. Dit is natuurlijk niet handig, en daarvoor zijn er de multipliers die verderop besproken worden.


3. Simpel voorbeeld waarbij we gebruik maken van een karakterset.

Code

#De RewriteEngine aan zetten
RewriteEngine On

#De RewriteRule
RewriteRule ^[^0-9]\.html$ index.php?p=niet_numerieke_url [L]


Uitleg RewriteRule
RewriteRule ^[^0-9]\.html$ index.php?p=niet_numerieke_url [L]

• ^: Het ^ teken heeft binnen [ en ] een ander betekenis dan deze erbuiten heeft. Binnen een karakterset ( [ en ] ) betekent het “niet”. Deze RewriteRule zou je dus lezen als “Een karakter die niet in de set 0-9 zit”. Dit betekent dus alle karakters behalve de 0,1,2,3,4,5,6,7,8 en de 9.
• [ en ] : Het karakter [ duidt het begin van een karakter set aan en het karakter ] duidt het einde aan.
• 0-9: 0-9 betekent de reeks getallen van 0-9, dus 0,1,2,3,4,5,6,7,8 en 9.

Mogelijke aanroep
(Log in to see link!) zal herschreven worden naar (Log in to see link!) .

(Log in to see link!) zal niet herschreven worden, omdat de URL na de base een cijfer uit de reeks 0-9 bevat.

Ook de url (Log in to see link!) zal niet herschreven worden, omdat een karakterset maar voor 1 enkel karakter telt. Dit is natuurlijk niet handig, en daarvoor zijn er de multipliers die verderop besproken worden.


De volgende 3 voorbeelden hebben te maken met multipliers
4. Simpel voorbeeld waarbij we gebruik maken van een karakterset en een multiplier.

Code

#De RewriteEngine aan zetten
RewriteEngine On

#De RewriteRule
RewriteRule ^.+\.html$ index.php?p=alles_met_lengte_groter_dan_1 [L]


Uitleg RewriteRule
RewriteRule ^.+\.html$ index.php?p=alles_met_lengte_groter_dan_1 [L]

• ^, + en $ : Zie voorbeeld 1 en 2
• . : De punt is ook een speciaal karakter, de punt staat voor elk willekeurig karakter, dus dit kan een letter zijn, een cijfer of elk ander karakter.

Het + karakter zorgt ervoor dat het vorige karakter / de vorige karakter set 1 of meerdere keren voor mag komen, in dit geval betekent het dus 1 of meer keren elk willekeurig karakter.

Mogelijke aanroep
(Log in to see link!) zal herschreven worden naar (Log in to see link!) .

(Log in to see link!) zal niet herschreven worden, omdat de URL na de base de lengte 0 heeft, en het + karakter zegt dat de lengte 1 of meer moet zijn.


5. Simpel voorbeeld waarbij we gebruik maken van een karakter set en een multiplier.

Code

#De RewriteEngine aan zetten
RewriteEngine On

#De RewriteRule
RewriteRule ^.*\.html$ index.php?p=alles [L]


Uitleg RewriteRule
RewriteRule ^.*\.html$ index.php?p=alles [L]

• ^, +, . en $ : Zie voorbeeld 1 en 2
• Het * karakter zorgt ervoor dat het vorige karakter / de vorige karakter set 0 of meerdere keren voor mag komen, in dit geval betekent het dus 0 of meerdere keren elk willekeurig karakter.

Mogelijke aanroep
(Log in to see link!) zal herschreven worden naar (Log in to see link!) .

(Log in to see link!) zal ook herschreven worden naar (Log in to see link!) .

6. Simpel voorbeeld waarbij we gebruik maken van een karakter set en een multiplier.

Code

#De RewriteEngine aan zetten
RewriteEngine On

#De RewriteRule
RewriteRule ^abc[cd]?\.html$ index.php?p=abc [L]


Uitleg RewriteRule
RewriteRule ^abc[cd]?\.html$ index.php?p=abc [L]

• ^ en $ : Zie voorbeeld 1 en 2
• Het ? karakter zorgt ervoor dat het vorige karakter / de vorige karakter set 0 of 1 keer voor mag komen, in dit geval betekent het dus 0 of 1 keer de karakterset ‘cd’.

Mogelijke aanroep
(Log in to see link!) zal herschreven worden naar (Log in to see link!) .

(Log in to see link!) zal ook herschreven worden naar (Log in to see link!) .

Alle andere urls zullen niet herschreven worden.


Referenties en groeperen
Nu we alle multipliers gehad hebben ( + * ? ) is het tijd om door te gaan met het groeperen en referenties maken in een regexp. Dit klinkt misschien moeilijk, maar het valt reuze mee.
Referentie’s maak je door middel van het ( en ) teken.

7. Voorbeeld waarbij we een referentie leggen.

Code

#De RewriteEngine aan zetten
RewriteEngine On

#De RewriteRule
RewriteRule ^([0-9]+)\.html$ index.php?p=nummeriek&nummer=$1 [L]


Uitleg RewriteRule
RewriteRule ^([0-9]+)\.html$ index.php?p=nummeriek&nummer=$1 [L]

• ( en ) : De karakters ( en ) geven het begin en het eind van een groepering aan. Een groepering zorgt ervoor dat je in het 2e deel van de regexp een referentie kan maken naar de gematchde url.
• [0-9]: maakt een karakter set bestaande uit de karakters 0,1,2,3,4,5,6,7,8 en 9.
• +: Zorgt ervoor dat de karakterset [0-9] 1 of meerdere keren voor mag komen.
• Nummer=$1 : De $1 is een referentie naar de gematchte tekst bij de 1e groepering. In dit geval is de 1e groepering tevens de enigste: ([0-9]+).

Mogelijke aanroep
(Log in to see link!) zal herschreven worden naar (Log in to see link!) .

(Log in to see link!) zal niet herschreven worden, omdat de URL niet alleen uit nummers bestaat.

8. Een voorbeeld met meerdere groeperingen.

Code

#De RewriteEngine aan zetten
RewriteEngine On

#De RewriteRule
RewriteRule ^([0-9]+)\-([0-9a-z]+)\.html$ index.php?p=bla&nummer=$1&referentie2=$2 [L]


Uitleg RewriteRule
RewriteRule ^([0-9]+)\-([0-9a-z]+)\.html$ index.php?p=bla&nummer=$1&referentie2=$2 [L]

• ( en ) : De karakters ( en ) geven het begin en het eind van een groepering aan. Een groepering zorgt ervoor dat je in het 2e deel van de regexp een referentie kan maken naar de gematchde url.
• [0-9]: maakt een karakter set bestaande uit de karakters 0,1,2,3,4,5,6,7,8 en 9.
• [0-9a-z]: maakt een karakter set bestaande uit de nummers 0-9 en de letters a-z ( case-sensitive )
• +: Zorgt ervoor dat de karakterset [0-9] en de karakters [0-9a-z] 1 of meerdere keren voor mag komen.
• Nummer=$1 : De $1 is een referentie naar de gematchte tekst bij de 1e groepering. In dit geval is de 1e groepering : ([0-9]+).
• Referentie2=$2: De $2 is een referentie naar de gematchte tekst bij de 2e groepering. In dit geval is de 2e groepering: ([0-9a-z]+).

Mogelijke aanroep
(Log in to see link!) zal herschreven worden naar (Log in to see link!) .

(Log in to see link!) zal niet herschreven worden, omdat de eerste karakterset alleen uit nummers mag bestaan.

Alternatieve tekst
Als laatste wil ik de alternatieve tekst bespreken, een simpel voorbeeld van “of”.

9. Voorbeeld met alternatieve tekst

Code

#De RewriteEngine aan zetten
RewriteEngine On

#De RewriteRule
RewriteRule ^(zoeken|home|blaat)\.html$ index.php?p=$1 [L]


Uitleg RewriteRule
RewriteRule ^(zoeken|home|blaat)\.html$ index.php?p=$1 [L]

• (zoeken|home|blaat) : Met het | teken duidt je aan dat of het een of het ander toegestaan is. In dit geval OF zoeken OF home OF blaat.

Mogelijke aanroep
(Log in to see link!) zal herschreven worden naar (Log in to see link!) .

(Log in to see link!) zal herschreven worden naar (Log in to see link!) .

(Log in to see link!) zal herschreven worden naar (Log in to see link!) .

Alle overige urls zullen niet herschreven worden.


Samenvatting:

Multipliers
? : 0 of 1 keer het voorgaande
* : 0 of meerdere keren het voorgaande
+ : 1 of meerdere keren het voorgaande

Karakterset
[ en ] : begin en eind van karakterset
- : geeft een reeks aan bijvoorbeeld 0-9
^ : betekent binnen [ en ] “niet”, [^0-9] is dus niet in de reeks 0-9

Referentie en groepering
( en ) : geven het begin en eind van een groepering aan
$N : geeft een referentie naar een groep aan, waarbij N het groepnummer is. N >= 1.

Typ fouten voorbehouden

Dit was het voor de eerste tutorial, mocht er veel interesse in zijn dan zal de volgende tutorial over REWRITE_COND gaan.

   Chris S., Kryap BVBA
2 jul 2006 15:10 
Zeer goed en uitgebreid uitgelegd! Dit verdient andermaal een sticky :P.

   Ramon Fincken, CreativePulses.nl / WebsiteFreel
2 jul 2006 15:11 
punt 1:

#De RewriteRule
RewriteRule ^zoeken.html$ index.php?p=zoeken [L]


Uitleg RewriteRule
RewriteRule ^zoeken\.html$ index.php?p=zoeken [L]


komt niet overeen, voor de rest prima tutorial !

Rfn

   Stefan van Elsas, Private person
2 jul 2006 15:14 
Als de edit knop weer verschijnt zal ik het aanpassen, bedankt voor het opmerken.

   Stephan E, Eijer Media
3 jul 2006 08:45 
Ik gebruik om het wat makkelijker te maken altijd deze online tool:

(Log in to see link!)

   Verlangen, Alleznet Media
3 jul 2006 09:42 
Handige bladzijde om af te drukken en dan langs je computer te hangen als je er mee bezig bent: (Log in to see link!)

Voor de rest goed artikel hoor

   Ramon Fincken, CreativePulses.nl / WebsiteFreel
3 jul 2006 10:17 
cool, die site had ook al:
mysql_cheat_sheet.png

ook handig voor een snel overzicht!

(Log in to see link!)

     Changed on 03-07-2006 10:21 by Ramon Fincken
   Koen v H., Private person
5 jul 2006 16:20 
hoe moet ik dan in een multiplier aangeven dat op het eind er een . (punt) moet staan? Want een . staat voor alle karakters.. ?

   Matthijs Huisman, Men on Web
5 jul 2006 16:26 
Eerst escapen? Met een /. dacht ik ofzo.

   Stefan van Elsas, Private person
5 jul 2006 16:44 

hoe moet ik dan in een multiplier aangeven dat op het eind er een . (punt) moet staan? Want een . staat voor alle karakters.. ?


Inderdaad escapen, maar met een \
dus bijvoorbeeld \.




 
© Copyright TargetMedia 2001-2010 | Mobile | Premium SMS | Micropayments | Download Music | Ringtones Check visitor stats RSS feed