2016-04-17 4 views
0

Я пытаюсь сделать групповой захват в блоке местоположения Nginx, и он не работает для меня.Nginx location group capture + rewrite

Является ли то, что я пытаюсь сделать даже возможным?

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

Сообщение об ошибке я получаю это:

"(. *) ^/$ Кошка/([0-9] +) $" не соответствует «/ Автомобили/120/новый- car-rentals/"

У меня есть намного больше категорий, чем то, что я публикую, и пытаюсь предотвратить запись перезаписи 5x для каждой конкретной категории.

Любая помощь будет оценена по достоинству.

ответ

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 (чувствительно к регистру) с возможными черточек мои категории/названия страниц.