【发布时间】:2011-12-10 01:06:33
【问题描述】:
我正在尝试使用 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 中的时间进行比较,如果它在一定范围内,则授予访问权限。
【问题讨论】:
-
我不认为这是题外话,它显然与 LAMP 相关。
标签: apache .htaccess mod-rewrite rewritemap