You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用.htaccess Rewrite规则通过Cookie保护目录文件下载权限

解决.htaccess规则阻止未登录用户下载指定目录文件的问题

当前规则的问题

  • Cookie匹配逻辑错误:你需要检查的是名为qts的Cookie中包含is_logged_in=true,但当前规则仅泛检查Cookie值里的is_logged_in=true,未关联Cookie名称,会出现误判
  • 正则语法错误:\.(png!jpg)$是无效写法,扩展名分隔应使用|,正确格式为\.(png|jpg)$
  • 规则目标不符合需求:当前规则跳转至/index.php,但实际需要的是禁止下载,应返回403状态码或跳转至登录提示页

正确规则配置方案

方案1:将.htaccess放在网站根目录

<IfModule mod_rewrite.c>
RewriteEngine On
# 匹配directory_in_question目录下的png/jpg文件
RewriteRule ^directory_in_question/.*\.(png|jpg)$ - [E=CHECK_FILE:true]
# 仅针对目标文件执行Cookie检查
RewriteCond %{ENV:CHECK_FILE} true
# 检查名为qts的Cookie中是否包含is_logged_in=true,不满足则拦截
RewriteCond %{HTTP_COOKIE} !qts=.*is_logged_in=true [NC]
# 返回403禁止访问,若需跳转登录页可改为 /login.php [R=302,L]
RewriteRule ^ - [R=403,L]
</IfModule>

方案2:将.htaccess放在directory_in_question目录下

<IfModule mod_rewrite.c>
RewriteEngine On
# 匹配当前目录下的png/jpg文件
RewriteRule ^.*\.(png|jpg)$ - [E=CHECK_FILE:true]
RewriteCond %{ENV:CHECK_FILE} true
# 精准匹配qts Cookie中的登录状态
RewriteCond %{HTTP_COOKIE} !qts=.*is_logged_in=true [NC]
# 返回403禁止访问
RewriteRule ^ - [R=403,L]
</IfModule>

规则说明

  • %{HTTP_COOKIE} !qts=.*is_logged_in=true [NC]:精确匹配名为qts的Cookie,其值包含is_logged_in=true,NC表示不区分大小写
  • [R=403,L]:R=403返回403禁止访问状态码,L表示终止后续规则处理
  • 若需跳转登录页面,可将[R=403,L]替换为[R=302,L]并修改目标路径,例如RewriteRule ^ /login.php [R=302,L]

内容的提问来源于stack exchange,提问作者Baxterdmutt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:55:28