所以我映射$ http_cookie来检查客户端发送的所有cookie,我想拦截的唯一一个cookie,以获取cookie的值是任何带有MD5 HASH的cookie。
检测MD5哈希的正则表达式是
[0-9a-f]{32}
但是当我将它添加到我的map指令时,Nginx因为正则表达式错误而无法运行。
这是我的cookie地图,这个问题是它获取所有cookie我只想要那些MD5总和。
map $http_cookie $session_id_value {
default '';
~^.*.+\=(?<session_value>[\w]+).*$ $session_value;
}
我试试这个
map $http_cookie $session_id_value {
default '';
~^.*[0-9a-f]{32}.+\=(?<session_value>[\w]+).*$ $session_value;
}
但是Nginx并不喜欢我的正则表达式。所以它错误并且不会运行。
我使用echo模块进行测试,看看我的正则表达式抓取的cookie的值,但是目前它仍然抓住第一个随机cookie,而不是带有名称的MD5哈希的cookie。
echo "Session Cookie Value : $session_id_value";
echo "httpcookie : $http_cookie";
答案 0 :(得分:1)
这是语法错误。来自rewrite
documentation:
如果正则表达式包含“}”或“;”字符,则为整数 表达式应该用单引号或双引号括起来。
尝试:
map $http_cookie $session_id_value {
default '';
"~^.*[0-9a-f]{32}.+\=(?<session_value>[\w]+).*$" $session_value;
}