WordPress中基于Cookie限制未登录用户直接访问PDF的.htaccess规则失效排查
原规则的问题分析
你当前使用的规则存在几个关键问题,导致本地部分生效、线上完全失效:
- RewriteRule中的
%1是无效捕获组:前面的RewriteCond没有定义捕获分组,%1会输出空值,导致跳转URL错误 - Cookie匹配规则过于严格:
!^.*cookie_name.*$要求Cookie值以指定内容开头,而实际Cookie格式是name=value; 其他cookie,应该匹配包含cookie_name=的格式 - 规则放置位置错误:如果把自定义规则放在WordPress默认规则之后,会被WordPress的URL重写规则覆盖
修正后的规则
将以下规则放在WordPress的.htaccess文件最顶部(# BEGIN WordPress之前):
# 限制未登录用户直接访问PDF文件 RewriteCond %{REQUEST_URI} \.pdf$ [NC] # 替换成你的目标Cookie名称,比如WordPress登录Cookie是wordpress_logged_in_xxxx RewriteCond %{HTTP_COOKIE} !.*cookie_name=.* [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}/contact-sales/ [L,R=302,QSA]
规则说明
[NC]:忽略大小写,匹配.PDF等大写后缀的文件R=302:明确指定临时跳转,方便测试调整;若需永久跳转可改为R=301[L]:停止执行后续规则,避免冲突QSA:保留原请求的查询参数(如果有的话)
线上环境额外排查步骤
- 服务器配置检查:确认Apache开启
mod_rewrite模块,且站点目录的AllowOverride设置为All - 缓存清理:清除CDN、服务器缓存及浏览器缓存,避免旧规则或Cookie缓存影响测试
- Cookie名称验证:在浏览器开发者工具的
Application > Cookies中,确认你要匹配的Cookie名称完全正确(比如WordPress登录用户的Cookie默认以wordpress_logged_in_开头) - 匿名窗口测试:使用浏览器匿名窗口测试,避免已登录状态或本地缓存干扰
内容的提问来源于stack exchange,提问作者Lohit Parihar
相关产品推荐
相关产品推荐

