如何在.htaccess中将目录重写为Cookie值?
URL重写解决方案
问题背景
通过PHP生成12位随机字符串并设置Cookie:
$val = substr(str_shuffle(str_repeat("abcdefghijklmnopqrstuvwxyz0123456789", 12)), 0, 12); setcookie('sub' , $val , time() + (86400) , '/');
需求是将example.com/folder/file.php重写为example.com/{$_COOKIE['sub']}/file.php(示例:example.com/6df1fcb7aba6/file.php),但尝试的规则无法生效:
RewriteCond %{HTTP_COOKIE} !^.*sub.*$ [NC] RewriteRule %{HTTP_COOKIE} !^.*sub.*$/(.*) folder/$1
问题分析
你写的规则存在两处核心错误:
RewriteRule语法错误,第一个参数必须是URL路径的匹配模式,不能直接写Cookie条件- 逻辑方向搞反,现有规则试图匹配无Cookie的请求,但实际需求是基于Cookie值处理路径重写
正确实现
根据需求分两种场景处理:
场景1:内部重写(服务器隐藏真实路径)
用户访问example.com/随机串/file.php时,服务器实际处理example.com/folder/file.php,对外仍显示带随机串的URL。规则如下:
# 从Cookie中捕获sub的12位随机值 RewriteCond %{HTTP_COOKIE} sub=([a-z0-9]{12}) [NC] # 匹配带随机串的URL,重写到folder目录下对应文件 RewriteRule ^([a-z0-9]{12})/(.*)$ folder/$2 [L]
场景2:外部重定向(跳转用户到带随机串的URL)
用户访问example.com/folder/file.php时,自动跳转到example.com/随机串/file.php。规则如下:
# 从Cookie中捕获sub的12位随机值 RewriteCond %{HTTP_COOKIE} sub=([a-z0-9]{12}) [NC] # 匹配folder开头的URL,重定向到带随机串的路径 RewriteRule ^folder/(.*)$ /%1/$1 [R=302,L]
R=302是临时重定向,测试完成后可改为R=301永久重定向,避免浏览器缓存问题
内容的提问来源于stack exchange,提问作者Mixtuur
相关产品推荐
相关产品推荐

