2016-03-24 4 views
0

У меня есть это правило местоположение:Переменный захват с скобкой в ​​Nginx месте сопрягая

location ~ ^/banks/(?P<region>[\w/~\-]+?)/responses/?$ { 
    rewrite^$scheme://${host}/services/responses/list/city/${region}/? permanent; 
} 

и она работает идеально подходит для URLs как:

http://example.com/banks/Arhangel~skaya_oblast~/Mirnyiy/responses/ 

Но теперь мне нужно изменить мое местоположение, чтобы соответствовать URLs с круглыми скобками внутри него. Я использую эту версию:

location ~ ^/banks/(?P<region>[\w/~\-()]+?)/responses/?$ { 
    rewrite^$scheme://${host}/services/responses/list/city/${region}/? permanent; 
} 

Но есть не переписывают не происходило URL /banks/Respublika_Saha_(Yakutiya)/Neryungri/responses/.

проверить эту модель с PHP preg_match функции:

preg_match('|^/banks/(?P<region>[\w/~\-()]+?)/responses/?$|', 
    '/banks/Respublika_Saha_(Yakutiya)/Neryungri/responses/'); 

И это возвращает 1, так что этот шаблон совпадает с URL ( и ).

Кроме того, я проверить эту строку с питоном re.search:

import re 
matches = re.search('|^/banks/(?P<region>[\w/~\-()]+?)/responses/?$|','/banks/Respublika_Saha_(Yakutiya)/Neryungri/responses/') 
print matches.start() 

И это возвращает 0, так что эта модель соответствует этой строке с самого начала.

Но nginx так не считает.

Как изменить правило размещения nginx для соответствия этому URL /banks/Respublika_Saha_(Yakutiya)/Neryungri/responses/?

P.S. моя версия nginx - nginx/1.9.10

+0

но это работает: [https://regex101.com/r/vI6jZ4/1] (https://regex101.com/r/vI6jZ4/1) –

+0

Да, этот шаблон отлично работает с php 'preg_match' или python' re.search', но не в правиле определения nginx –

+0

Работает для меня на 'nginx' 1.8. 0 –

ответ

0

Извините за этот вопрос. Nginx отлично работает. И проблема была не в nginx, а в наших devops (почти нет dev и очень плохой ops). Ниже я добавляю схему нашей системы. В нескольких словах система состоит из следующих частей: nginx balancer, унаследованная система apache, nginx для новой системы на основе soa, nginxes для сервисов.

Я консультировался с дефомами, и они сказали мне изменить определенную конфигурацию nginx в одном из наших репозиториев git. Я изменил его, имея в виду конфигурацию балансировки, но наши devops забыли о балансировщике nginx, потому что он не контролируется версией. Поэтому я изменил конфигурацию nginx для новой SOA-системы, но это перенаправление должно отправлять наших пользователей от старой к новой системе на этапе балансировки.

Я был очень расстроен нашим DevOps, так Nginx работает, но их нет :)

enter image description here