我正在尝试使用 RewriteMap 函数的结果有条件地允许访问目录。
目的是从 cookie (my_cookie) 中读取时间戳并将其传递到我在 httpd.conf 中定义的 RewriteMap (my_rewrite_map_func) 中(如果时间戳在cookie 在 Apache 中当前时间的一定范围内)。
RewriteMap my_rewrite_map_func prg:/var/www/program
我的 .htaccess 文件的内容是:
RewriteEngine On
RewriteCond %{HTTP_COOKIE} my_cookie=([^;]+) [NC]
RewriteCond ${my_rewrite_map_func:%{TIME}%1|FALSE},FALSE ^([^,]+),\1 [NC]
RewriteRule ^(.*)$ / [NC,L,QSA,F]
我可以确认程序本身正在运行,正在读取 cookie,并且 Apache 时间戳和 cookie 时间戳在允许的范围内。
第二个 RewriteCond 上的正则表达式检查 ${my_rewrite_map_func:%{TIME}%1|FALSE} 的返回值是否为 FALSE,但是,无论我将其设置为什么,RewriteRule 都不会发生。
本质上,我无法确定如何评估 ${my_rewrite_map_func:%{TIME}%1|FALSE} 的值。有没有办法更好地提取或存储它的价值?
非常感激任何的帮助。
更新 - 解决方案: 我不确定为什么这个问题被标记为离题,它涉及通过使用 mod_rewrite 调用 C++ 程序的 Apache .htaccess 文件来保护 html 文件免受 php 脚本的影响。
无论如何,上面的代码在与另外两行结合使用来处理 cookie 不存在的情况时可以完美地工作:
RewriteCond %{HTTP_COOKIE} !^.*my_cookie.*$ [NC]
RewriteRule ^(.*)$ / [NC,L,QSA,F]
希望这将帮助其他在同一问题上遇到困难的人;在网络上的其他地方似乎没有什么成功。
我的具体案例涉及防止直接访问 html 和其他文件而不直接修改它们或使用下载脚本。PHP 代码用于生成包含指向这些文件的链接的页面,Javascript 从中执行 ajax 调用以检索服务器的时间戳并设置 cookie。cookie 中的时间戳与 Apache 在页面加载时的时间进行比较,如果它在某个范围内,则授予访问权限。