nginx переписывает весь request_uri

Я знаю, что для этого есть масса примеров, но я просто хочу убедиться. к сожалению, я не могу проверить это в течение следующих нескольких дней, поэтому я спрашиваю здесь.

каков эквивалент перезаписи этого местоположения?

location ~* /v1/device/(.*)/ { 
  proxy_pass http://api.domain.com/api/v1.0/download/$1; 
} 

я хочу по существу перезаписать весь входящий запрос, за исключением регулярного выражения часть.

Я думаю, что это так, но не уверен:

location ~* /v1/device/(.*)/ { 
 rewrite ^/v1/device/(.*)/ /api/v1.0/download/$1 break; 
 proxy_pass http://api.domain.com; 
}

интересно, есть ли более чистый способ, тогда как мне не нужно повторять / v1 / device / в правиле перезаписи.

спасибо

0
задан 18 October 2017 в 23:49
1 ответ

Я бы не стал беспокоиться о перезаписи здесь, поскольку это просто дополнительная работа для nginx ...

Тем не менее, можно просто использовать следующее:

location ~* /v1/device/(?<part>.*)/ {
    rewrite ^ /api/v1.0/download/$part break;
    proxy_pass http://api.domain.com;
}

Мы можем использовать строку с кратчайшим соответствием из любых строк для условия перезаписи, поскольку условие уже сопоставлено в блоке . Мы также записываем требуемую часть в переменную $ part , которую затем будем использовать для назначения.

Еще один момент, ваше регулярное выражение немного растянуто. Он соответствует, например, /sdhfdsah/v1/device/something/ajkldfkadsfjh/sdfhahfd/file.html . Кроме того, он соответствует / v1 / device // something . Я сомневаюсь, что вы хотите, чтобы это работало именно так, поэтому я предлагаю вам использовать + вместо * и добавить начальные (^) и конечные ($) якоря в регулярное выражение.

0
ответ дан 5 December 2019 в 07:18

Теги

Похожие вопросы