Nginx位置组捕获+重写

时间:2016-04-17 04:51:48

标签: nginx pcre

我试图在Nginx位置区域进行群组捕获,但这对我不起作用。

我想做的甚至可能吗?

location ~* /(?<cat>cars|trucks|bikes|motorcycle|quads) {
    rewrite ^/$cat/([0-9]+)(.*)$ /page.php?id=$1 last;
}

我收到的错误消息是:

&#34; ^ / $猫/([0-9] +)$&#34(*);不匹配&#34; / cars / 120 / new-car-rental /&#34;

我的分类比我发布的要多得多,并试图阻止为每个特定的类别名称写一个5x的重写。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

我不熟悉这种特殊的语法,但根据我与他人的经验,您是否可能只需要逃避使用的正斜杠?

location ~* \/(?<cat>cars|trucks|bikes|motorcycle|quads) {
    rewrite ^\/$cat\/([0-9]+)(.*)$ /page.php?id=$1 last;
}

答案 1 :(得分:0)

我通过这样做解决了这个问题:

location ~* /(cars|trucks|bikes|motorcycle|quad-bikes) {
    rewrite ^/([a-zA-Z-]+)/([0-9]+)(.*)$ /page.php?id=$2 last;
    ...
    ...
}

正则表达式([a-zA-Z - ] +)允许我在我的类别/页面名称中使用字符a-z(不区分大小写)和可能的破折号。