.htaccess - htaccess 从 www 到非 www,在 session /cookie 中引入变量

标签 .htaccess redirect cookies session-variables

.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 默认为 /securehttponly 默认为 false

使用的[CO]标志将指定为.example.com,以便cookie可访问到 example.com 域下的所有主机。 生命周期被指定为14400,以分钟为单位,因此总计10天。

关于.htaccess - htaccess 从 www 到非 www,在 session /cookie 中引入变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18198757/

相关文章:

apache - 没有mod_rewrite的Apache重写?

.htaccess RewriteRule 有效,但地址栏中的 URL 没有变化?

apache - 通过 apache 从外部服务器提供内容

c - 如何将管道命令的输出重定向到文件

javascript - 如何使用 jquery.cookie 仅为主页设置 cookie,而不为其他页面设置 cookie

.htaccess - 创建 sef 链接并用破折号 (-) 更改加号 (+)

javascript - 请求nodejs模块不支持某些url的重定向

.htaccess - 当新页面具有相同的 url 结构时进行 301 重定向

session - 在 Electron 中的渲染器和主进程之间共享 Cookie 和 session

ruby-on-rails - Rails 5 - 集成测试 NoMethodError: #<Rack::Test::CookieJar:0x00000006796390> 的未定义方法 `signed'