Я знаю, что для этого есть масса примеров, но я просто хочу убедиться. к сожалению, я не могу проверить это в течение следующих нескольких дней, поэтому я спрашиваю здесь.
каков эквивалент перезаписи этого местоположения?
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 / в правиле перезаписи.
спасибо
Я бы не стал беспокоиться о перезаписи
здесь, поскольку это просто дополнительная работа для 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
. Я сомневаюсь, что вы хотите, чтобы это работало именно так, поэтому я предлагаю вам использовать +
вместо *
и добавить начальные (^) и конечные ($) якоря в регулярное выражение.