Ciasteczka w mod_rewrite

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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *