【问题标题】:Why url rewrite can't capture my last group with lookahead in the group before?为什么 url rewrite 无法在之前的组中捕获我的最后一个组?
【发布时间】:2018-05-16 14:09:18
【问题描述】:

我尝试重写此 URL。第 4 组是可选的,直到问号为止。即使没有 g4 或斜线,也必须捕获第 5 组。必须在没有第 3 组的情况下捕获第 4 组。

https://www.example.de/prefix/group1/group2/group3-suffix/group4(optional)?group5

Regex 似乎在大多数 regex 风格中完全符合需要,但在我的 .htaccess 中,第 5 组始终为空。

我的重写看起来像这样:

RewriteRule ^prefix/([^/]*)/([^/]*)/([^/]*)-suffix?/?((?:(?![?/]).)*)/?\??(.*)?/?$ /target.jsp?g1=$1&g2=$2&g3=$3&g4=$4&$5 [L]

感谢您的帮助!

【问题讨论】:

  • 因为?group5是一个查询字符串?!
  • G5 将是问号之后的所有内容。事实上,这可以是一个查询字符串。 G4 查找直到 qm 或正斜杠。
  • RewriteRule 不查看查询字符串,因此结果不同。
  • 我希望从未问过这个问题。你把我带到了正确的道路上。我需要使用 RewriteCond 来获取查询参数。

标签: regex .htaccess mod-rewrite capture lookahead


【解决方案1】:

由于RewriteRule 不查看查询字符串,您需要使用预定义的标志将旧查询字符串附加到目标 URL,称为 QSA

RewriteRule ^prefix/([^/]*)/([^/]*)/([^/]*)-suffix?/?([^/]*)/?$ /target.jsp?g1=$1&g2=$2&g3=$3&g4=$4 [L,QSA]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-22
    • 2012-06-14
    • 2018-09-21
    • 2013-01-25
    • 2023-02-15
    • 2021-10-22
    • 1970-01-01
    • 2016-12-14
    相关资源
    最近更新 更多