【问题标题】:Apache 2.4 - IF block for different url patternsApache 2.4 - 不同 url 模式的 IF 块
【发布时间】:2019-10-21 15:34:47
【问题描述】:

我正在尝试在一个重写文件中创建 if 块并在 url 模式匹配时调用不同的重写文件

<If "%{REQUEST_URI} =~ /category1(.*)$/">
    Include conf.d/sites/abc/301_redirections_category1.conf
</If>
<ElseIf "%{REQUEST_URI} =~ /category2/subcategory1(.*)$/">
    Include conf.d/sites/abc/301_redirections_category21.conf
</ElseIf>
<Else "%{REQUEST_URI} =~ /category2/subcategory2(.*)$/">
    Include conf.d/sites/abc/301_redirections_category22.conf
</Else>

我面临的问题:

  1. 使用第一个模式/category1(.*)$/,它允许任何包含category1 的url,而不是以/category1 开头的url
  2. 第 2 和第 3 模式不起作用并给出正则表达式语法错误。

我尝试了不同的语法但没有成功

  1. m#/category1(.*)$/#i
  2. m#/\s/category1(.*)$/#i
  3. m#/\/category1(.*)$/#i
  4. m#\s/category2\s/sucategory1(.*)$/#i

【问题讨论】:

    标签: regex apache apache2.4


    【解决方案1】:

    您能否尝试在您的正则表达式模式中添加起始锚点的代码:

    <If "%{REQUEST_URI} =~ m#^/category1#">
        Include conf.d/sites/abc/301_redirections_category1.conf
    </If>
    <ElseIf "%{REQUEST_URI} =~ m#^/category2/subcategory1#">
        Include conf.d/sites/abc/301_redirections_category21.conf
    </ElseIf>
    <ElseIf "%{REQUEST_URI} =~ m#^/category2/subcategory2#">
        Include conf.d/sites/abc/301_redirections_category22.conf
    </ElseIf>
    

    【讨论】:

    • 我已经尝试了你的建议。第一条规则工作正常。 2nd & 3rd 给出语法错误。这是因为模式中有多个 / 字符。我试图通过使用以下方法来逃避它 - m#^/category2\/subcategory2# 或 m#^/category2\s/subcategory2# 但没有运气
    • 错误是:AH00526:/httpd/conf.d/sites/abc/301_redirections.conf 第 4 行的语法错误
    • 问题出在最后一个区块。 Else 不支持任何条件,你需要ElseIf。现在检查更新的答案。使用m#...#时也无需转义/
    猜你喜欢
    • 2019-04-22
    • 2015-10-06
    • 2018-07-20
    • 2017-05-07
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    相关资源
    最近更新 更多