如何在 Apache 中基于 RewriteMap 查找设置 RewriteRule?

问题描述 投票:0回答:1

我正在尝试在 Apache 中创建重写规则,以匹配与从

RewriteMap
检索到的特定值不匹配的 URL。

我有一个

RewriteMap
定义如下:

RewriteMap product_map txt:/path/to/product_map.txt

RewriteMap
包含如下条目:

55-55f /tv-backlight/55-55f
65-65ju /tv-backlight/65-65ju

我的目标是:

  1. 从 URL 中提取产品密钥(例如 55-55f)。
  2. RewriteMap
    中查找产品密钥以获取相应的主 URL。
  3. 将当前
    REQUEST_URI
    与从
    RewriteMap
    检索到的主 URL 进行比较。
  4. 对与主 URL 不匹配的任何 URL 应用
    410 Gone
    状态。

我尝试过的: 尝试 1:使用基本 RewriteCond

RewriteCond %{REQUEST_URI} ^.*/([^/]+)$
RewriteCond ${product_map:%1|NOT_FOUND} !=NOT_FOUND
RewriteCond %{REQUEST_URI} !=${product_map:%1|NOT_FOUND}

RewriteRule ^ - [G,L]
  • 预期: 它应该提取产品密钥,检索主 URL,然后比较两者。
  • 结果: 失败,因为
    ${product_map:%1|NOT_FOUND}
    右侧的
    RewriteCond
    未计算。 Apache 将
    ${product_map:%1|NOT_FOUND}
    视为文字字符串。

尝试 2:使用 RewriteCond

expr

RewriteCond %{REQUEST_URI} ^.*/([^/]+)$
RewriteCond ${product:%1|NOT_FOUND} ^(.*)$

RewriteCond expr "%{REQUEST_URI} != %2"
RewriteRule ^ - [G,L]
  • 预期: 它应该提取产品密钥、检索主 URL 并比较两者。
  • 结果: 失败,因为
    %2
    右侧的
    RewriteCond
    未计算。 Apache 将
    %2
    视为文字字符串。
apache .htaccess mod-rewrite url-rewriting
1个回答
0
投票

感谢@C3roehere提到类似的问题。

我通过以下配置实现了这一点:

RewriteCond %{REQUEST_URI} ^.*/([^/]+)$
RewriteCond %{REQUEST_URI},${product_map:%1|NOT_FOUND} !^([^,]+),(\1|NOT_FOUND)$
RewriteRule ^ - [G,L]
© www.soinside.com 2019 - 2024. All rights reserved.