当用户使用自定义哈希ex-url:example.com/YT6pTeHDNoROFuXeeDiS键入url时
然后网站验证该散列作为密码
然后重定向到ex-url:example.com/placeToBe
但当直接访问example.com/placeToBe时,它会询问自定义哈希或显示错误页面或重定向
简而言之:
YT6pTeHDNoROFuXeeDiS对应于placeToBe目录,而不是相反
数据库示例:
MJJFWYYYKLXULGTWIE5M=>placeToBe1
3O5OBD77M5S12ZD2PHXYIHVL7LMRTL02NJJN6LPA=>placeToBe3
我知道如何在php中做到这一点:
当输入hashurl时,浏览器将重定向到自定义404页面,
如果hash通过并验证
,则该404页面包含hash的筛选器然后脚本为相应的目录创建cookie,然后
重定向到该目录
目录索引善意地检查,好吧,你得到了我的cookie:D,然后允许浏览
其内容。
但我的兴趣在于.htaccess和apache魔法,因此我的问题是:
如何有条件地设置和检查cookie,然后使用.htaccess重定向到正确的目录
实际上,使用htaccess强制执行访问限制可以做得更好:
- 在他们登录时设置一个带有随机值的cookie
- 在某个位置创建与该值相对应的文件
- 将用户直接发送到受访问限制的url
然后,添加条件重写规则:
- 如果存在与cookie名称对应的文件,则让他们通过
- 如果没有,请将用户重定向到403或登录屏幕
我的RewriteRule foo有点生疏,但您基本上需要在第一次RewriteCond中对%{HTTP_COOKIE}
使用捕获regex,然后在后续的RewriteCon中使用捕获来检查文件是否存在(使用-f
)。
如果全部清除,则:
RewriteRule ^ - [L]
在随后的规则中,只检查cookie的存在,如果是,则返回403:
RewriteRule ^ - [F]
在最后一条规则中,返回一个登录屏幕;例如:
RewriteRule ^ /login [L]
哦,在每种情况下,不用说,第一个RewriteCond应该只在受限制的URI上执行这些规则——否则,例如,由于登录屏幕上的重写循环,您将收到500个错误。
当用户注销时,删除cookie和相应的文件。
要删除松散的文件,请定期删除过期的文件,例如,如果cookie设置为一周,则超过一周的相应文件应被丢弃,并在用户刷新会话时触摸现有文件。
您根本不需要.htaccess/mod_rewrite来执行您想要的操作。
而不是强迫用户转到类似的URL
example.com/YT6pTeHDNoROFuXeeDiS
给他们这样的网址:
example.com/validation.php?hash=YT6pTeHDNoROFuXeeDiS
以及在验证.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" );
}