gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:57:46 24 4
gpt4 key购买 nike

关闭。这个问题是off-topic .它目前不接受答案。












想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。

9年前关闭。




Improve this question




我正在尝试使用 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} 的值。有什么方法可以更好地提取或存储它的值(value)吗?

非常感激任何的帮助。

更新 - 解决方案:
我不确定为什么这个问题被标记为题外话,它涉及通过使用 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 中的时间进行比较,如果它在某个范围内被授予访问权限。

最佳答案

这是我的做法(您可能认为这是很多指令,但与 PHP 处理相比它太快了,您不必担心 5(或其他)条件而不是 2(或其他)):

RewriteEngine On
RewriteCond %{HTTP_COOKIE} my_cookie=([^;]+) [NC]
# Don't touch anything but create MYCOOKIE environment
# and set it to empty if not found:
RewriteRule . - [E=MYCOOKIE:${my_rewrite_map_func:%{TIME}%1|}]
# If the environment was found = not empty:
RewriteCond %{E:MYCOOKIE} !^$ [NC]
# ... then process a rewrite rule:
RewriteRule [blabla...blabla]

我做了 50 次这样的事情,我的网络服务器仍然非常快。 (瓶颈是数据库)

希望这可以帮助

关于Apache RewriteMap 用于防止直接访问文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8453554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com