我正在努力使用一些 Apache HTTP 服務器配置。具體來說,我從查找檔案中加載格式為 YYMMDDHHmmss 的日期RewriteMap,我嘗試將其與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
到目前為止它似乎不起作用,這導致我來到這里。有人對如何解決這個問題有任何建議嗎?
我能想象的最后一根稻草將是我評估運算式的任何型別的腳本。
uj5u.com熱心網友回復:
RewriteCond ${lookup:somekey|NOT_FOUND} NOT_FOUND [or] RewriteCond ${lookup:somekey|19700101010101} <%{TIME}
您沒有RewriteRule在示例中包含完整的規則(即指令)。根據您嘗試執行的具體操作,您可能會決定以不同的方式解決此問題。
上述條件的主要問題是表單的服務器變數%{VARIABLE}沒有在CondPattern(RewriteCond指令的第二個引數)中擴展。所以%{TIME}被視為文字文本。
旁白:這里不需要兩個條件。如果在重寫映射中未找到somekey,則兩個條件都為真(通過這些條件的感知邏輯)。
如果您正在檢查相等性,那么您可以使用帶有內部反向參考的正則運算式(例如)。但是,您正在檢查“小于”(字典字串比較)。
解決此問題的一種方法是將重寫映射查找的值分配給環境變數,并在 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。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/322349.html
