Dotychczas pisząc regułki dla mod_rewrite operowałem tylko na URL-ach. Ostatnio w pracy przy okazji wdrażania nowej wersji strony musiałem przekierować adresy starych stron na nowe. Trudność polegała na tym, że w starej wersji jeden URL generował trzy wersje językowe, a język jest przechowywany w ciasteczku. Na szczęście mod_rewrite może operować na wielu elementach żądania HTTP, w tym na ciasteczkach. Po kilku minutach czytania doszedłem do takiego wyniku:
RewriteCond %{QUERY_STRING} ^event=testAccount$ [NC] RewriteCond %{HTTP_COOKIE} LANG=fr [OR] RewriteCond %{HTTP_COOKIE} !^.*LANG.*$ RewriteRule ^/5/index\.cfm$ /5/tester-gratuitement? [NC,R=301,L] RewriteCond %{QUERY_STRING} ^event=testAccount$ [NC] RewriteCond %{HTTP_COOKIE} LANG=nl RewriteRule ^/5/index\.cfm$ /5/test-gratis? [NC,R=301,L] RewriteCond %{QUERY_STRING} ^event=testAccount$ [NC] RewriteCond %{HTTP_COOKIE} LANG=en RewriteRule ^/5/index\.cfm$ /5/test-for-free? [NC,R=301,L]
Pierwszy zestaw dotyczy francuskiej a zarazem domyślnej wersji strony. Istotne są druga i trzecia instrukcja RewriteCond, które odpowiednio sprawdzają czy ciasteczko LANG ma wartość fr lub czy w ogóle nie jest ustawione. Następująca po nich instrukcja RewriteRule przekierowuje do nowej francuskiej strony. Tu warto dodać, że mod_rewrite operuje na ciasteczkach w takiej postaci w jakiej są przesyłane w nagłówku HTTP Cookie czyli napisu rozdzielonego średnikami.