Flags in een RewriteRule

Op de voorgaande pagina hebben we voorbeelden gezien van een RewriteRule met twee parameters. Er is echter nog een derde optionele parameter die we kunnen toevoegen. De flags die we hiervoor kunnen gebruiken, zorgen ervoor dat de RewriteRule iets anders zal werken.

Allereerst maar eens een overzicht met de belangrijkste:

[R] - Redirect een url zichtbaar
[F] - Forceert geen toegang tot een url (403 foutmelding)
[L] - Laatste regel. Gebruik dit voor elke regel die niet met een ander verbonden is.
[NC] - Maak de regel niet hoofdlettergevoelig

Een volledig overzicht van alle flags vind je ook op de Mod Rewrite Cheat Sheet:
Afbeelding

De werking van deze flags spreekt redelijk voor zich. De actie behorende bij een flag wordt alleen uitgevoerd als de regel waartoe die flag behoort uitgevoerd wordt.

Voorbeeld 6: Een pagina zichtbaar doorverwijzen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
RewriteEngine On
RewriteBase /
RewriteRule oud.php nieuw.php [R]

Dit voorbeeldje is bijna hetzelfde als voorbeeld 2. Alleen de werking zal iets anders zijn doordat we de [R] flag toegevoegd hebben. Wederom zal de inhoud van nieuw.php getoond worden, maar nu zien we ook dat nieuw.php in de url weergegeven wordt. Kortom, de gebruiker is dus echt doorverwezen naar een andere pagina.

Voorbeeld 7: Pagina bekijken verbieden
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
RewriteEngine On
RewriteBase /
RewriteRule ^\.htaccess$ .htaccess  [F]

Met deze regel is het onmogelijk voor gebruikers om ons .htaccess bestand te bekijken. Ditzelfde kun je natuurlijk met allerlei andere bestanden doen.

Voorbeeld 8: RewriteEngine stoppen na uitvoeren regel
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
RewriteEngine On
RewriteBase /

RewriteRule ^tutorials/(.*)/(.*)/(.*)/$ tutorials.php?id=$1&page=$2&replies=$3 [L]
RewriteRule ^tutorials/(.*)/(.*)/$ tutorials.php?id=$1&page=$2 [L]
RewriteRule ^tutorials/(.*)/$ tutorials.php?id=$1 [L]

Zo zou het voorbeeld van de vorige pagina er eigenlijk uit moeten zien. Als immers aan de eerste regel voldaan is, hoeven de regels daaronder niet meer uitgevoerd te worden. Om dat te voorkomen voegen we de [L] flag toe.

Voorbeeld 9a: Toevoegen van ontbrekende /
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
RewriteEngine On
RewriteBase /
RewriteRule ^tutorials/(.*)$ tutorials/$1/ [R]
RewriteRule ^tutorials/(.*)/$ tutorials.php?id=$1 [L]

Op deze manier wordt aan een url als http://www.jouwsite.nl/tutorials/10, die normaal gesproken een 'pagina niet gevonden' foutmelding zou geven, eerst een / toegevoegd. Nadat dat gedaan is wordt de volgende regel uitgevoerd en de url dus wel op een juiste manier geinterpreteerd.

Een andere oplossing voor dit probleem is het gebruik van het ? uit de reguliere expressie syntax. Dit teken houdt in dat het voorgaande teken 0 of 1 keer mag voorkomen. De RewriteRule ziet er dan als volgt uit.

Voorbeeld 9b: Toevoegen van ontbrekende / (2)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
RewriteEngine On
RewriteBase /
RewriteRule ^tutorials/(.*)/?$ tutorials.php?id=$1 [L]

Deze code voegt de / niet daadwerkelijk toe, maar interpreteert de url goed ongeacht of de laatste / er nu wel of niet staat.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Vereiste instellingen
  3. Basis van Mod Rewrite
  4. Zoekmachine vriendelijke urls
  5. Flags in een RewriteRule
  6. Voorwaarden stellen met RewriteCond
  7. Slotwoord en referenties

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.