求助:用.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
相关产品推荐
相关产品推荐

