У меня есть 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")
.