.htacces 从 www.example.com
重定向到 example.com
(没有 www 的相同域)
返回的访问者可以在用户代理中拥有 visitor_id
cookie。
我想通过 cookie 或 session 中的域带来这个值。
我尝试了这个,但 cookie 是为 www 域创建的
RewriteCond %{HTTP_HOST} ^www.example.com
RewriteCond %{HTTP_COOKIE} visitor_id=([^;]+)
RewriteRule .* - [C,env=foo:%1]
RewriteRule ^(.*) http://example.com [L,R=301]
Header set Set-Cookie "visitor_id=%{foo}e; path=/" env=foo
此外,环境变量适用于本地主机(Apache 2.4.2,Win32),但在线(Apache 2.2.25,linux)cookie中的值是“%{foo}e”
而不是预计数量。
还尝试过 mod_session_cookie
但找不到实际示例。
如何通过域进行重定向,将 visitor_id
引入 Cookie 或 session Cookie?
最佳答案
由于环境 %{env}
变量在不同的 Apache 版本中表现不一致,我建议使用 RewriteRule
设置 cookie本身使用 [CO]
cookie 标志。
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteCond %{HTTP_COOKIE} visitor_id=([^;]+) [NC]
RewriteRule .* $0/vid/%1 [C] # Appends the cookie value to the URL
RewriteRule ^(.*)/vid/(.*)$ http://example.com/$1 [L,R=301,CO=visitor_id:$2:.example.com:14400:/]
以下是对 .htaccess
文件所做的更改列表:
RewriteCond
匹配现在不区分大小写(使用[NC]
)%{HTTP_HOST}
条件中的点已转义\.
(.
匹配任何其他字符)第一个
RewriteRule
将访问者 ID(捕获为%1
)附加到 URL(捕获为$0
)最后一个
<RewriteRule
从 URL 解析访问者 ID(如$1
)并执行永久[R=301]
重定向到http://example.com
并使用[CO]
标志写入名为visitor_id
的 cookie。
cookie重写标志的语法如下
[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly]
其中必须指定名称、值和域的值。 生命周期默认为0
,这意味着cookie仅在当前浏览器 session 中持续存在。 Path 默认为 /
,secure 和 httponly 默认为 false
。
使用的[CO]
标志将域指定为.example.com
,以便cookie可访问到 example.com
域下的所有主机。 生命周期被指定为14400
,以分钟为单位,因此总计10
天。
关于.htaccess - htaccess 从 www 到非 www,在 session /cookie 中引入变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18198757/