用于唯一URL的Apache内部重写模块?

时间:2011-02-02 21:20:45

标签: oracle apache mod-rewrite url-rewriting

我正在尝试使用以下方案创建安全下载Web应用程序。任何人都知道如何实现这一目标:

1)为用户提供一次性URL     a)此一次性URL存储在映射到实际URL的Oracle DB中 2)当用户访问一次性URL时:     a)Apache模块连接到DB以查看是否存在一次性URL     b)如果存在,apache会对实际的URL进行内部重写     c)如果没有,则404或任何类型的错误(404或其他)足够好

2.a和2.b是我正在寻找的答案。我不知道如何做到这一点,并确保重写发生在内部。

由于

3 个答案:

答案 0 :(得分:0)

AFAIK这不可能只是通过apache。你必须要做的是:

  • 配置apache以将唯一链接重定向到服务器脚本,这将导致“魔术”发生
  • 服务器脚本检查唯一提供的URL是否仍然有效并按照以下方式执行:
    • 提供文件并使数据库
    • 中的unique-url行无效(删除或标记为已提供)
    • 回复状态404或在其他情况下重定向到404页

有关如何使事情发生的具体细节取决于您在服务器上可用的脚本引擎以及您的首选项。它可以在各种引擎中完成,从php到cgi到.NET再到asp和许多其他引擎。

答案 1 :(得分:0)

这应该可以使用Apache的trunk版本中提供的新的dbd-type RewriteMap功能。显然,作为服务器的当前开发分支,您需要注意随着时间推移的配置中断变化。

RewriteEngine On
RewriteMap urlmapper "dbd:SELECT redirect_url from my_table WHERE some_key = %s"
RewriteRule /one_time/(.+) ${urlmapper:$1|/404.html}

当然,您需要一些额外的逻辑来处理没有返回结果的情况。

http://httpd.apache.org/docs/trunk/rewrite/rewritemap.html#dbd

答案 2 :(得分:0)

想出来......你可以使用XSEND(https://tn123.org/mod_xsendfile/)实现这一点...设置一个php脚本来处理任何带文件下载的URI并拒绝所有访问实际文件目录所以获取文件的唯一方法是通过XSEND强制它。