Apache RewriteCond 比较时间
Apache RewriteCond compare TIME
我正在为一些 Apache HTTP 服务器配置而苦苦挣扎。具体来说,我通过 RewriteMap
从查找文件中加载格式为 YYMMDDHHmmss 的日期,我尝试将其与 TIME
变量。
RewriteMap lookup "txt:/path/to/file.flat"
RewriteCond ${lookup:somekey|NOT_FOUND} NOT_FOUND [or]
RewriteCond ${lookup:somekey|19700101010101} <%{TIME}
在 file.flat
中会是这样的:
somekey 20211010042042
到目前为止它似乎没有用,这让我来到这里。有人对如何解决这个问题有什么建议吗?
我能想到的最后一根稻草将是我用来评估表达式的任何类型的脚本。
RewriteCond ${lookup:somekey|NOT_FOUND} NOT_FOUND [or]
RewriteCond ${lookup:somekey|19700101010101} <%{TIME}
您没有在示例中包含完整的规则(即 RewriteRule
指令)。根据您要执行的具体操作,您可能会决定以不同的方式解决此问题。
上述条件的主要问题是%{VARIABLE}
形式的服务器变量没有在CondPattern中扩展(RewriteCond
指令的第二个参数)。所以 %{TIME}
被视为文字文本。
旁白: 这里不需要两个条件。如果在重写映射中未找到 somekey,则两个条件都将为 true(根据这些条件的感知逻辑)。
如果您要检查 相等性 ,那么您可以使用带有内部反向引用 (for example) 的正则表达式。但是,您正在检查“小于”(字典字符串比较)。
解决此问题的一种方法是将重写映射查找的值分配给环境变量,并在 Apache 表达式(RewriteCond expr
指令 - 在 Apache 2.4 上可用)中使用它来进行比较。您不能直接在 Apache 表达式中查找重写映射。
例如:
RewriteRule ^ - [E=LOOKUP_VALUE:${lookup:somekey}]
RewriteCond expr "reqenv('LOOKUP_VALUE') < %{TIME}"
RewriteRule ^ - [E=SUCCESS:1]
在您的示例中,您不需要显式设置 DefaultValue(如果在重写映射中找不到密钥),因为 空字符串 总是“小于”%{TIME}
。 (与 19700101010101
相同。)
我正在为一些 Apache HTTP 服务器配置而苦苦挣扎。具体来说,我通过 RewriteMap
从查找文件中加载格式为 YYMMDDHHmmss 的日期,我尝试将其与 TIME
变量。
RewriteMap lookup "txt:/path/to/file.flat"
RewriteCond ${lookup:somekey|NOT_FOUND} NOT_FOUND [or]
RewriteCond ${lookup:somekey|19700101010101} <%{TIME}
在 file.flat
中会是这样的:
somekey 20211010042042
到目前为止它似乎没有用,这让我来到这里。有人对如何解决这个问题有什么建议吗?
我能想到的最后一根稻草将是我用来评估表达式的任何类型的脚本。
RewriteCond ${lookup:somekey|NOT_FOUND} NOT_FOUND [or] RewriteCond ${lookup:somekey|19700101010101} <%{TIME}
您没有在示例中包含完整的规则(即 RewriteRule
指令)。根据您要执行的具体操作,您可能会决定以不同的方式解决此问题。
上述条件的主要问题是%{VARIABLE}
形式的服务器变量没有在CondPattern中扩展(RewriteCond
指令的第二个参数)。所以 %{TIME}
被视为文字文本。
旁白: 这里不需要两个条件。如果在重写映射中未找到 somekey,则两个条件都将为 true(根据这些条件的感知逻辑)。
如果您要检查 相等性 ,那么您可以使用带有内部反向引用 (for example) 的正则表达式。但是,您正在检查“小于”(字典字符串比较)。
解决此问题的一种方法是将重写映射查找的值分配给环境变量,并在 Apache 表达式(RewriteCond expr
指令 - 在 Apache 2.4 上可用)中使用它来进行比较。您不能直接在 Apache 表达式中查找重写映射。
例如:
RewriteRule ^ - [E=LOOKUP_VALUE:${lookup:somekey}]
RewriteCond expr "reqenv('LOOKUP_VALUE') < %{TIME}"
RewriteRule ^ - [E=SUCCESS:1]
在您的示例中,您不需要显式设置 DefaultValue(如果在重写映射中找不到密钥),因为 空字符串 总是“小于”%{TIME}
。 (与 19700101010101
相同。)