小编liz*_*bit的帖子

Apache RewriteMap用于防止直接访问文件

我试图使用RewriteMap函数的结果有条件地允许访问目录.
目的是从cookie(my_cookie)中读取时间戳并将其传递到我在httpd.conf中定义的RewriteMap(my_rewrite_map_func)(如果时间戳在时间,它是一个可以将字符串"TRUE"或"FALSE"回复到stdout的可执行文件cookie在Apache的当前时间的某个范围内).

RewriteMap my_rewrite_map_func prg:/var/www/program
Run Code Online (Sandbox Code Playgroud)

我的.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]
Run Code Online (Sandbox Code Playgroud)

我可以确认程序本身正在运行,正在读取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文件来保护PHP脚本中的html文件.

无论如何,上面的代码与两个额外的行一起使用时可以很好地处理cookie不存在的情况:

RewriteCond %{HTTP_COOKIE} !^.*my_cookie.*$ [NC]
RewriteRule ^(.*)$ / [NC,L,QSA,F]
Run Code Online (Sandbox Code Playgroud)

希望这能帮助那些在同一问题上遇到困难的人; 网络上的其他地方似乎没有什么成功.

我的具体案例涉及防止直接访问html和其他文件而不直接修改它们,或使用下载脚本.PHP代码用于生成包含指向这些文件的链接的页面,Javascript从中执行ajax调用以检索服务器的时间戳并设置cookie.将cookie中的时间戳与Apache在页面加载时的时间进行比较,如果它在一定范围内,则授予访问权限.

apache .htaccess mod-rewrite rewritemap

5
推荐指数
1
解决办法
776
查看次数

标签 统计

.htaccess ×1

apache ×1

mod-rewrite ×1

rewritemap ×1