mod_rewrite to edit cookies conditionally
You can Get/Detect/check for existance of cookie through RewriteCond %{HTTP_COOKIE}
Set Cookie value with the RewriteRule flag cookie|CO which has this syntax:
[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly]
An example with them both together:
RewriteCond %{HTTP_COOKIE} cookiekey=cookievalue [NC]
RewriteRule ^(.*)$ /$1 [L,CO=cookiekey:NewCookieValue:mydomain.com:86400:/]
In the example above the redirection will only happen if cookiekey has a value of cookievalue. You can also use regex in the cookievalue RewriteCond if you desire.
More examples (read user comments as well): http://www.askapache.com/htaccess/htaccess-fresh.html#Cookie_Manipulation_Tests_mod_rewrite
Related videos on Youtube
PinkElephantsOnParade
Updated on September 18, 2022Comments
-
PinkElephantsOnParade over 1 year
Is it possible to use mod_rewrite to modify values in cookies based upon a condition? I am completely new to HTTP, but I have tried a thing or two. The only regex I know is Perl-style, I hope it is okay.
RewriteRule s/.[0-9][0-9][0-9]/COOKIE=MSFNODE/g;
MSFNODE
is a value in my cookie.- The thing I want to run my regex on is
SESSIONID
(also in my cookie). I'm not sure how to choose that as a target. - As the regex shows, I want to replace
.[0-9][0-9][0-9]
with my cookie value calledMSFNODE
, but only ifMSFNODE
exists!
Is
COOKIE=MSFNODE
the right way to do this? Also, I only want this to happen ifMSFNODE
exists — as it is now, will it just pass on through and not follow the rewrite rule ifMSFNODE
doesn't exist?I feel like even my most basic regex is flawed here.
-
joosthoek almost 12 yearsYou could probably do this with mod_rewrite, but honestly, I suspect there are more appropriate tools for the job. It might help if you told us just what you want to accomplish with this.
-
DocRoot over 7 years@IlmariKaronen You can manually set the
Set-Cookie
header using mod_headers, but if you need to set this "conditionally", your options are limited unless you are on Apache 2.4 (expressions). mod_rewrite handles this just fine on all versions of Apache.
-
DocRoot over 7 yearsLooks like a typo... it should be
CO=
(notCO:
) in your example (as you have stated in the syntax just above it).