2016-11-27 2 views
0

Поэтому у меня есть регулярное выражение на основе правила о местоположении, что-то вроде этого:Nginx - регулярное выражение расположение

location ~ /(abc.*xyz|def.*zxy|ghk.*qwe)/ 

Могу ли я проверить, какая часть регулярного выражения дали матч? Это означает, что если URL был как

/12abc34/ 

Чем я хотел бы знать, что это было подобрано

.*abc.* 

Есть ли способ?

Я запускаю последний nginx, скомпилированный с lua-модулем на VM Debian на AWS.

------------ Обновление -------------

Я имею в виду использовать внутреннее расположение, но это будет некрасиво:

location ~ /(abc.*xyz|def.*zxy|ghk.*qwe)/ 
{ 
    location ~ /(abc.*xyz){...} 
    location ~ /(def.*zxy){...} 
... 
} 

Прямо сейчас у меня есть 60 шаблонов регулярных выражений. Это такой подход?

+0

Считаете ли вы использование 'map' с' $ request_uri'? Подробнее см. [Этот документ] (http://nginx.org/en/docs/http/ngx_http_map_module.html#map). –

ответ

1

регулярного выражения выражения: /(.*abc.*|.*def.*|.*ghk.*)/ может быть уменьшен до:

location ~ (abc|def|ghk).*/ { ... } 

Как любого nginx начинается URI с /, вам не нужно, чтобы проверить на /.*.

Часть регулярного выражения в скобках является захвачен как $1 в пределах location блока.

В случае /12abc34/ переменная $1 будет установлена ​​в abc.

+0

Хорошо, но у меня также есть правила вроде (xyz. * Abc). Решение, которое вы предложили неудачно, не будет работать для этого :( –

Смежные вопросы