【问题标题】:nginx: [emerge] unknown "1" variable - when using curly braces around variables numbersnginx:[emerge] 未知的“1”变量 - 在变量编号周围使用花括号时
【发布时间】:2019-03-09 05:27:36
【问题描述】:

在这条规则中

location / {
    rewrite ^/(.+)/(.+)/(.+)/(.+)/(.+)/(.+)/(.+)/(.+)/(.+)/(.+)$ /index.php?param1=${1}&param2=${2}&param3=${3}&param4=${4}&param5=${5}&param6=${6}&param7=${7}&param8=${8}&param9=${9}&param10=${10} last;
}

我试图传递 9 个参数的限制,所以我在变量编号周围使用了花括号,但给了我这个错误消息

nginx: [emerge] unknown "1" variable

【问题讨论】:

  • 也许它没有 ${1} 的定义。是否以其他方式分配给其他地方,例如 $1 = "hey" ?另外,正则表达式 (.+)<space>/index 中似乎有一个文字空间
  • @sln 我不太了解 nginx 如何进行重写,但如果我使用 $1 而不是 ${1},即使我以 $ 结束正则表达式,它也会按预期工作,但会立即添加以防止混淆。
  • 任何包含大括号的表达式都必须用引号引起来。
  • @RichardSmith 如${"1"}?
  • @RichardSmith 修正了错字并使用了引号,但给了我与上面相同的错误,我认为数字参数的限制为 9

标签: php regex nginx url-rewriting


【解决方案1】:

如果您在某些表达式中使用某些字符(};),则需要将整个表达式括在单引号或双引号内。

但是,这个问题涉及到只有前 9 个捕获可用作 Nginx 中的数字捕获。

但您可以使用命名捕获(即使仅用于第 10 次捕获)。

例如:

rewrite ^/(.+)/(.+)/(.+)/(.+)/(.+)/(.+)/(.+)/(.+)/(.+)/(?<a>.+)$
/index.php?param1=$1&param2=$2&param3=$3&param4=$4&param5=$5&param6=$6&param7=$7&param8=$8&param9=$9&param10=$a
last;

命名捕获(?&lt;a&gt;.+) 将捕获放入变量$a

【讨论】:

    猜你喜欢
    • 2014-05-31
    • 2016-06-06
    • 2021-10-25
    • 1970-01-01
    • 2012-02-03
    • 2014-10-01
    相关资源
    最近更新 更多