[co]标记用于apache rewriterule中直接向客户端设置cookie,需按name:value:domain[:lifetime[:path[:secure[:httponly]]]]顺序指定字段,域名必须带前导点(如.example.com),仅支持单cookie且须在directory或虚拟主机配置中使用。
![apache 中 rewriterule 怎么使用 [co] 标记在重写时向客户端种下 cookie](https://img.php.cn/upload/article/001/242/473/179003768877630.jpg?x-oss-process=image/resize,p_40)
[CO] 标记用于在 Apache 的 RewriteRule 执行过程中,向客户端浏览器设置一个 Cookie,无需额外脚本或后端参与。它属于 RewriteRule 的 [flags] 参数之一,语法紧凑但字段要求明确。
一、基本语法格式
RewriteRule pattern target [CO=NAME:VALUE:DOMAIN[:LIFETIME[:PATH[:SECURE[:HTTPONLY]]]]]
各字段含义如下(按顺序,可选部分用方括号表示):
-
NAME:Cookie 名称(必需) -
VALUE:Cookie 值(必需;支持$N或%N反向引用) -
DOMAIN:作用域域名(必需;必须以点开头,如.example.com,否则可能被浏览器拒绝) -
LIFETIME:有效期(单位:分钟;可省略,省略则为会话级 Cookie) -
PATH:路径前缀(默认/;建议显式指定,如/或/app/) -
SECURE:设为true表示仅通过 HTTPS 传输(值为true或false;不写默认不启用) -
HTTPONLY:设为true表示禁止 JavaScript 访问(同上)
✅ 正确示例:
.example.com(带前导点)
❌ 错误示例:example.com(无点,多数浏览器不接受跨子域)
二、典型使用场景与写法
✅ 场景1:用户访问 /login 后自动种下登录标识 Cookie
RewriteEngine On RewriteRule ^/login$ - [CO=logged_in:true:.example.com:1440:/,L]
说明:
-
-表示不改写 URL(只执行 flag 动作) - 种下名为
logged_in、值为true、作用域.example.com、有效期 24 小时(1440 分钟)、路径/的 Cookie -
[L]确保不再匹配后续规则
✅ 场景2:从 URL 路径中提取参数并写入 Cookie
RewriteRule ^/setlang/(en|zh|ja)$ - [CO=lang:$1:.example.com:10080:/,L]
访问 /setlang/zh 时,将自动设置 lang=zh,有效期 7 天(10080 分钟)
✅ 场景3:配合安全策略(HTTPS + HttpOnly)
RewriteCond %{HTTPS} on
RewriteRule ^/admin/ - [CO=admin_auth:valid:.example.com:30:/admin/:true:true,L]
仅在 HTTPS 下为 /admin/ 路径设置带 Secure 和 HttpOnly 属性的 Cookie
三、注意事项与常见坑点
-
域名必须带前导点:
CO=...:.example.com:才能被子域(如api.example.com)共享;写成example.com通常无效 -
不能在
<location></location>或<files></files>块中使用:[CO]仅在<directory></directory>、.htaccess或虚拟主机配置的RewriteRule中生效 - 值中含特殊字符需编码:如空格、分号、逗号等,建议避免;若必须使用,应手动 URL 编码(Apache 不自动处理)
-
多个 Cookie 需多条规则:
[CO]每次只能设置一个 Cookie,不能逗号分隔多个 -
不适用于响应体重写:它只影响响应头中的
Set-Cookie,不修改页面内容
四、验证是否生效
- 在浏览器开发者工具 → Application → Cookies 中查看对应域名下是否有该 Cookie
- 或用 curl 检查响应头:
curl -I http://example.com/login
应看到类似:
Set-Cookie: logged_in=true; Domain=.example.com; Path=/; Expires=Wed, 21-Aug-2026 13:42:00 GMT; Secure; HttpOnly
直接写进规则就能生效,不需要重启 Apache,但需确保 mod_rewrite 已启用且配置允许 .htaccess 或虚拟主机中使用 RewriteRule。










