7. Voorbeeld 1: Fork
# activeer Rewriting Engine
RewriteEngine On
# base alle rewrite op de ‘/’ URL
RewriteBase /
# backend is een bestaande directory die behandeld moet worden
# als ieder andere file
RewriteCond %{REQUEST_URI} ^/backend/$
RewriteRule . index.php [NC,L]
# als de URL niet leeg is
RewriteCond %{REQUEST_URI} !^$
# ... en het bestand bestaat niet
RewriteCond %{REQUEST_FILENAME} !-f
# ... en de directory bestaat niet
RewriteCond %{REQUEST_FILENAME} !-d
# rewrite de url naar /index.php
RewriteRule . index.php [NC,L]
8. RewriteEngine On
• activeert de rewriting engine
• verplicht als eerste regel voor alle andere regels
9. RewriteRule pattern result [flags]
• kan meer dan 1 keer voorkomen
• worden in volgorde afgehandeld
• eerste regel wordt toegepast op de volledige URL
• volgende regels gebruiken het resultaat van de vorige
regel
10. RewriteRule pattern result [flags]
• PCRE (Perl-Compatible Regular Expressions)
• vergelijkt met het URL gedeelte (zonder domein)
• RewriteCond nodig om andere stukken te vergelijken
11. RewriteRule pattern result [flags]
kan één van de volgende items zijn:
• filesystem path ( /kip/ei.pdf )
• URL path
• volledige URL (met domein)
• -
12. RewriteRule pattern result [flags]
• beïnvloedt het gedrag van de Rule
• tussen vierkante haakjes [NC]
• meerdere flags gescheiden door komma’s [NC, QSA, L]
14. RewriteRule pattern result [flags]
C Chain this rule to the next rule
E Set environment variable
F 403 Forbidden Status
G 410 Gone Status
H Specify handler
L Don’t process rules after this one
NC Case-insensitive
QSA Append query string
R[=301] Redirect (R=HTTP Status Code)
15. RewriteRule pattern result [flags]
C Chain this rule to the next rule
E Set environment variable
F 403 Forbidden Status
G 410 Gone Status
H Specify handler
L Don’t process rules after this one
NC Case-insensitive
QSA Append query string
R[=301] Redirect (R=HTTP Status Code)
16. RewriteRule pattern result [flags]
C Chain this rule to the next rule
E Set environment variable
F 403 Forbidden Status
G 410 Gone Status
H Specify handler
L Don’t process rules after this one
NC Case-insensitive
QSA Append query string
R[=301] Redirect (R=HTTP Status Code)
17. RewriteRule pattern result [flags]
C Chain this rule to the next rule
E Set environment variable
F 403 Forbidden Status
G 410 Gone Status
H Specify handler
L Don’t process rules after this one
NC Case-insensitive
QSA Append query string
R[=301] Redirect (R=HTTP Status Code)
18. RewriteRule pattern result [flags]
C Chain this rule to the next rule
E Set environment variable
F 403 Forbidden Status
G 410 Gone Status
H Specify handler
L Don’t process rules after this one
NC Case-insensitive
QSA Append query string
R[=301] Redirect (R=HTTP Status Code)
19. RewriteRule pattern result [flags]
C Chain this rule to the next rule
E Set environment variable
F 403 Forbidden Status
G 410 Gone Status
H Specify handler
L Don’t process rules after this one
NC Case-insensitive
QSA Append query string
R[=301] Redirect (R=HTTP Status Code)
20. RewriteRule pattern result [flags]
C Chain this rule to the next rule
E Set environment variable
F 403 Forbidden Status
G 410 Gone Status
H Specify handler
L Don’t process rules after this one
NC Case-insensitive
QSA Append query string
R[=301] Redirect (R=HTTP Status Code)
21. RewriteRule pattern result [flags]
C Chain this rule to the next rule
E Set environment variable
F 403 Forbidden Status
G 410 Gone Status
H Specify handler
L Don’t process rules after this one
NC Case-insensitive
QSA Append query string
R[=301] Redirect (R=HTTP Status Code)
22. RewriteRule pattern result [flags]
C Chain this rule to the next rule
E Set environment variable
F 403 Forbidden Status
G 410 Gone Status
H Specify handler
L Don’t process rules after this one
NC Case-insensitive
QSA Append query string
R[=301] Redirect (R=HTTP Status Code)
23. RewriteCond variable pattern [flags]
• HTTP Server Variables (HTTP_HOST, REQUEST_URI)
• pattern wordt vergeleken met de waarde van deze var
• flags die het gedrag van de Condition veranderen
(net zoals bij een RewriteRule)
33. 1. Fork (opnieuw)
# activeer Rewriting Engine
RewriteEngine On
# base alle rewrite op de ‘/’ URL
RewriteBase /
# backend is een bestaande directory die behandeld moet worden
# als ieder andere file
RewriteCond %{REQUEST_URI} ^/backend/$
RewriteRule . index.php [NC,L]
# als de URL niet leeg is
RewriteCond %{REQUEST_URI} !^$
# ... en het bestand bestaat niet
RewriteCond %{REQUEST_FILENAME} !-f
# ... en de directory bestaat niet
RewriteCond %{REQUEST_FILENAME} !-d
# rewrite de url naar /index.php
RewriteRule . index.php [NC,L]
34. 2. non-www naar www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
pattern flags
result
35. 2. non-www naar www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
vergelijk met deze pattern
pattern binnen ronde haakjes variable ‘$1’
36. 2. non-www naar www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
vervang door “http://www.example.com”
37. 2. non-www naar www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
de waarde die binnen de ronde haakjes is opgevangen
38. 2. non-www naar www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
Redirect met een 301 code
Maak dit de laatste RewriteRule
39. 3. no porn guys on sunday
RewriteEngine On
RewriteCond %{TIME_WDAY} 0
RewriteCond %{HTTP_REFERER} (porn) [NC]
RewriteRule .* - [F]
40. 4. test stadium
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^8.82.245.147$
RewriteRule .* /temp/index.html [R, NC, L]
41. RewriteOptions inherit
• neem de config over van de parent
• in virtual server context, neem alle rules over die op
serverniveau gedefinieerd staan
• in directory context, neem alle context, condities en
rules over die gedefinieerd staan in de parent
43. RewriteBase path
# /abc/def/.htaccess -- config file voor de directory /abc/def
# Belangrijk: /abc/def is het fysieke path voor /xyz
# de server heeft een 'Alias /xyz /abc/def' directive
RewriteEngine On
# laat de server weten dat we komen via /xyz en niet
# via het fysieke path /abc/def
RewriteBase /xyz
# the rewriting rules
RewriteRule ^oldstuff.html$ newstuff.html
# /xyz/oldstuff.html wordt hier dus herschreven naar /abc/def/newstuff.html
44. RewriteLog log-path
• logs rewrites wel, duh...
• relatieve paths zijn relatief ten opzichte van de
DocumentRoot
• absolute paths zijn ... euhm ... absoluut
45. RewriteLogLevel level
• integer 0 - 9
• 0 = log niets
• 9 = log bijna alles
• hoe hoger, hoe meer impact op performantie
• 2 of hoger enkel voor debugging
46. GEDAAN
• httpd.apache.org/docs/current/mod/mod_rewrite.html
• cheat sheet op AddedBytes.com