当用户使用自定义哈希ex url键入url时: example.com/YT6pTeHDNoROFuXeeDiS
然后网站将哈希验证为密码
然后重定向到ex url: example.com/placeToBe
但是当直接访问 example.com/placeToBe 时,它会询问自定义哈希或显示错误页面或重定向
简而言之:
YT6pTeHDNoROFuXeeDiS 对应 placeToBe 目录,而不是相反
db示例:
MJJFWYQYKLXULGTWIE5M =>的 placeToBe1
3O5OBD77M5S12ZD2PHXY =>的 placeToBe2
IHVL7LMRTL02NJJN6LPA =>的 placeToBe3
的 ...
我知道如何在php中执行此操作:
当输入哈希URL时,浏览器被重定向到自定义404页面,
那么404页面包含散列过滤器,如果散列通过并验证
然后脚本为相应的目录创建cookie然后再生成
重定向到该目录
目录索引亲切地检查,确定你得到我的cookie:D然后允许浏览
它的内容。
但我的兴趣在于.htaccess和apache巫术,因此我的问题是:
如何使用.htaccess有条件地设置和检查Cookie,然后重定向到右侧dir?
答案 0 :(得分:0)
实际上,您可以使用htaccess强制执行访问限制:
然后,添加条件重写规则:
我的RewriteRule-foo有点生疏,但你基本上需要在第一个RewriteCond中使用%{HTTP_COOKIE}
上的捕获正则表达式,然后在后续的RewriteCond中使用捕获来检查文件是否存在(使用-f
)。
如果全部清除,那么:
RewriteRule ^ - [L]
在后续规则中,仅检查cookie的存在,如果是,则返回403:
RewriteRule ^ - [F]
在最后一条规则中,返回登录屏幕;例如:
RewriteRule ^ /login [L]
哦,并且在每种情况下,不言而喻,第一个RewriteCond应该只在受限制的URI上强制执行这些规则 - 否则,例如,由于在登录屏幕上重写循环,您将获得500个错误。
当用户注销时,删除cookie和相应的文件。
要删除松散的末端,请定期删除过期的文件,例如如果cookie设置为一周,则超过一周的相应文件应该被删除,并在用户刷新其会话时触摸现有文件。
答案 1 :(得分:0)
您不需要 .htaccess / mod_rewrite 来完成您想要的任务。
而不是强迫用户转到以下网址:
example.com/YT6pTeHDNoROFuXeeDiS
给他们这样的网址:
example.com/validation.php?hash=YT6pTeHDNoROFuXeeDiS
并在 validation.php :
if (isset($_GET['hash']))
{
// do your validation stuff here
// redirect to some place - if you want but there is no need - you can
// do everything here
header( 'HTTP/1.1 303 See Other' );
header( "Location: someUrl" );
}
else
{
header( 'HTTP/1.1 303 See Other' );
header( "Location: someOtherUrl" );
}