Назад | Перейти на главную страницу

Может ли Nginx перенаправлять или перезаписывать URL-адреса, начинающиеся с «?» без использования директивы «если»?

У меня есть RSS-канал example.com/?format=feed&type=rss из старой установки Joomla. Сайт теперь построен на Jekyll и использует новый URL example.com/rss.xml для RSS-канала.

Правила перезаписи у меня не работают, поскольку URL-адрес начинается с "?". У меня он работает с директивой if, но хочу избежать использования, если.

Вот рабочая директива if, которую я хочу заменить перезаписью или перенаправлением:

if ($args ~ "type=rss") {
rewrite ^ https://example.com/rss.xml? permanent;
}

Может ли директива if для URL, начинающегося с "?" заменить на переписку или редирект?

Алекситен прав. В этом случае нет другого способа справиться с этим, поскольку то, что вы пытаетесь сопоставить, на самом деле не является частью местоположения, а скорее является аргументом GET. А также, как предложил Алексей, я бы использовал if ($arg_argname = "exact string"). Регулярные выражения имеют как накладные расходы на производительность, так и если они написаны неправильно, они могут привести к необъяснимым перенаправлениям и перезаписи.

Например, если вы хотите сопоставить тот факт, что format параметр имеет значение feed, вам нужно будет сделать что-то вроде этого: if ($arg_format = "feed").