2016-04-17 87 views
0

我想在Nginx位置块中做一个组捕获,它不适合我。Nginx位置组捕获+重写

我试图做甚至可能吗?

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

我收到的错误信息是:

“(。*)^/$猫/([0-9] +)$” 不匹配“/汽车/ 120 /新 - 汽车租赁/“

我有更多的类别比我发布,并试图防止为每个特定的类别名称写一个重写5倍。

任何帮助,将不胜感激。

回答

0

我对这个特定的语法并不熟悉,但是基于我与他人的经验,是否有可能只需要避开正在使用的正斜杠?

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

我从来没有必要在我的其他重写中逃避正斜杠。这是我得到的语法:http://nginx.org/en/docs/http/server_names.html#regex_names – Dave

0

我做这个,而不是解决了这个问题:

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

正则表达式([A-ZA-Z - ] +)允许我使用可能出现的破折号AZ字符(不​​区分大小写)我的类别/页面名称。