gpt4 book ai didi

apache - 用 RewriteLock 理解 Apache RewriteMap

转载 作者:行者123 更新时间:2023-12-04 08:46:01 33 4
gpt4 key购买 nike

我已经接管了一个相当繁重的 LAMP 应用程序的开发。最初的开发人员使用带有 RewriteMap 的 .htaccess 文件和 PHP 脚本来处理应用程序的某些条件。

具体来说,当客户端请求某些子域模式时,RewriteMap 会捕获它们并将它们发送到适当的应用程序模块。

我对典型的 mod_rewrite 重定向很满意,而且我想我已经弄清楚了基本的 RewriteMap 概念;但我很难找到关于 RewriteLock 如何工作的体面文档。根据 Apache 文档:

This directive sets the filename for a synchronization lockfile which mod_rewrite needs to communicate with RewriteMap programs. Set this lockfile to a local path (not on a NFS-mounted device) when you want to use a rewriting map-program. It is not required for other types of rewriting maps.



但这对我来说仍然有点模糊。 RewriteLock 的确切目的和功能是什么,它是如何工作的?

最佳答案

RewriteLock 与 prg: 一起使用关键词。 重写映射 可以与多个关键字一起使用,使用文本文件( txt: )、哈希文件( dbm: )、随机文本( rnd: )或外部映射脚本(这个是 prg: 关键字)。在这种模式下,外部脚本在 apache 启动时启动。然后对于每个传入的请求,当 mod-rewrite 调用 prg:映射时,apache 将输入发送到该脚本并读取输出流以获取值。

重写锁必须在这种情况下用于防止并行请求(因此该外部进程的并行输入)在此进程标准输出上混合答案。这是一种锁定机制(文件、给定路径、经典 token 、只有一个用户)来强制对这个外部映射脚本的调用进行序列化。恕我直言,在使用 prg 时应该通过 mod-rewrite 透明地应用它:因为我从来没有发现这种锁定事情不是强制性的 prg 情况。

编辑:

事实上,如果输出的随机化不是问题,您可以使用外部 prg: 没有 rewriteLock,即对于给定条目,您可以获得为另一个条目给出的响应,例如在执行一些高级 rnd 的脚本中:,您自己的循环服务。但是如果输出必须反射(reflect)条目,那么您需要该信号量,这当然会减慢 rewritemap 过程。

因此,如果您只使用 hashmap 或 textmap,则不需要设置 RewriteLock。

编辑:

您可以在此 thread 上找到有用的详细信息,就像锁定文件仅存在几毫秒的事实一样,当 apache 调用 prg 并等待答案时。

编辑:
关于这个问题,一个奇怪的事实是:

The original dev used an .htaccess file with RewriteMap



这很奇怪,因为 RewriteMap 无法处理 .htaccess 文件,.htaccess 是动态读取的配置条目,而 RewriteMap 如所述 here在 Context 行中只能在主配置或 VirtualHost 配置中设置。它不能位于位置、目录或 .htaccess 中。所以很有可能这永远不会在.htaccess中工作。

现在@puk 要求提供 RewriteMap 用法的示例。好吧,在 Stack Overflow 中搜索“RewriteMap”会给你展示几个真实的例子:
  • here in a question
  • here a list of example in my answer
  • another here
  • 关于apache - 用 RewriteLock 理解 Apache RewriteMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6658408/

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