Redirection & Apache Virtual Host files: verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Regel 79: Regel 79:
 
* Redirects kennen een ''precedence'', waarmee je kunt aangeven welke regels belangrijker zijn. Zo kun je bv. zorgen dat meer specifieke regels belangrijker zijn dan meer algemene regels.
 
* Redirects kennen een ''precedence'', waarmee je kunt aangeven welke regels belangrijker zijn. Zo kun je bv. zorgen dat meer specifieke regels belangrijker zijn dan meer algemene regels.
  
Je kunt mod_rewrite-redirects zowel in ''Virtual Host Files'' als in ''.htaccess'-bestanden toepassen. Deze laatste is het eenvoudigste, maar ik vermoed dat de eerste het meest efficiënte is voor Apache - en vermoedelijk het veiligste.
+
Verder: ''A rewrite rule can be invoked in httpd.conf or in .htaccess'' [https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html] - Niet in virtual host bestanden?
 +
 
 +
=== Wanneer gebruiken? ===
 +
 
 +
* ''mod_rewrite should be considered a last resort, when other alternatives are found wanting. Using it when there are simpler alternatives leads to configurations which are confusing, fragile, and hard to maintain. Understanding what other alternatives are available is a very important step towards mod_rewrite mastery.'' [https://httpd.apache.org/docs/2.4/rewrite/avoid.html]
 +
* Als je geen toegang hebt tot ''httpd.conf'' of ''virtual host-files'' [https://httpd.apache.org/docs/2.4/rewrite/avoid.html]
  
 
== Bronnen ==
 
== Bronnen ==

Versie van 12 mei 2020 10:23

Redirect worden in Apache verzorgd middels de mod_alias- en mod_rewrite-modules. Eenvoudige redirect zoals <oude pagina> → <nieuwe pagina>, gaan met de mod_alias-module.

302 Redirect Directive

De Redirect directive is onderdeel van mod_alias. Voorbeeld [1]:

<VirtualHost *:80>
   ServerName www.domain1.com
   Redirect / http://www.domain2.com
</VirtualHost>
  • Hierbij wordt de root van domain1.com doorgestuurd naar domain2.com
  • Let op: Dit is een 302 redirect oftewel een temporary redirect

301 Redirect Directive

Als hierboven, maar nu als permanent redirect:

<VirtualHost *:80>
   ServerName www.domain1.com
   Redirect 301 / http://www.domain2.com
</VirtualHost>

of

<VirtualHost *:80>
   ServerName www.domain1.com
   Redirect permanent / http://www.domain2.com
</VirtualHost>

RedirectMatch Directive

Met de RedirectMatch Directive kun je 301- & 302-redirects vormen met behulp van reguliere expressies en substituties. Het is een stuk flexibeler dan gewone redirects, maar nog niet zo flexibel als de mod_rewrite Redirects uit het volgende hoofdstuk.

Voorbeeld 302-redirect:

<VirtualHost *:80>
   ServerName example.com
   ServerAlias www.example.com

   RedirectMatch ^/images/(.*)$ http://images.example.com/$1
  • Wat hier gebeurd: Alle URL's die beginnen met "/images/", worden doorgestuurd naar "http://images.example.com/". De tekst achter "/images/" wordt daarbij gekopiëerd.
  • Voorbeeld: example.com/images/blub.jpgimages.example.com/blub.jpg.

Dit is hoe je hier een 301-redirect van maakt (niet getest):

<VirtualHost *:80>
   ServerName example.com
   ServerAlias www.example.com

   RedirectMatch 301 ^/images/(.*)$ http://images.example.com/$1

of

<VirtualHost *:80>
   ServerName example.com
   ServerAlias www.example.com

   RedirectMatch permanent ^/images/(.*)$ http://images.example.com/$1

mod_rewrite Redirects

mod_rewrite-redirects zijn de meest flexibele redirects. Ze zijn ook de meest complexe:

  • Per redirect moeten de voorwaarden gedefineerd worden, waaronder de betreffende redirect actief is
  • Redirects kennen een precedence, waarmee je kunt aangeven welke regels belangrijker zijn. Zo kun je bv. zorgen dat meer specifieke regels belangrijker zijn dan meer algemene regels.

Verder: A rewrite rule can be invoked in httpd.conf or in .htaccess [2] - Niet in virtual host bestanden?

Wanneer gebruiken?

  • mod_rewrite should be considered a last resort, when other alternatives are found wanting. Using it when there are simpler alternatives leads to configurations which are confusing, fragile, and hard to maintain. Understanding what other alternatives are available is a very important step towards mod_rewrite mastery. [3]
  • Als je geen toegang hebt tot httpd.conf of virtual host-files [4]

Bronnen