我正在尝试为通过 Apache HTTPD 的所有请求设置请求标头。该值需要从附加到请求的 cookie 中获取。从 Apache 文档来看,它看起来像mod_headers可能会有用。
根据该页面上的示例,我将其放在一起:
RequestHeader set MyHeaderName "expr=%{req:access_token}"
其中“access_token”是 cookie 值的名称。这设置了标头,但值是空的,所以我认为我的表达方式不正确。
是否有一个表达式可以用来获取 cookie 值?
答案1
我认为它expr=%{req:access_token}
不会为你提供 cookie 值,而只会提供与你的 cookie 同名的标头。你可能应该尝试从中找出一些东西,expr=%{HTTP_COOKIE}
并使用正则表达式提取特定的 cookie 值。也许这可行(但我不确定正则表达式反向引用是否可以用作标头值):
RequestHeader set MyHeaderName $2 "expr=%{HTTP_COOKIE} =~ /(^|;\ *)access_token=([^;\ ]+)/
或者这样(首先设置标题,然后编辑它):
RequestHeader set MyHeaderName "%{HTTP_COOKIE}" "expr=%{HTTP_COOKIE} =~ /(^|;\ *)access_token=([^;\ ]+)/
RequestHeader edit MyHeaderName "(^|;\ *)access_token=([^;\ ]+)" "$2"
如果这不起作用,你可能需要添加mod_env要做到这一点,也许是这样的:
SetEnvIf Cookie "(^|;\ *)access_token=([^;\ ]+)" MyCookieValue=$2
RequestHeader set MyHeaderName "%{MyCookieValue}e"
另请参阅SO上的类似问题:https://stackoverflow.com/questions/22645118/using-mod-header-to-change-cookie-domains