Как переписать путь, переслать параметры и добавить параметры?

В этом обсуждении SO говорится, что пересылать параметры при перезаписи URL-адреса с использованием return код должен быть похож на этот

location /path/to/resource {
  return 301 /some/other/path/$is_args$args;   
}

Все идет нормально. Но как добавить произвольный новый параметр в строку запроса? Например id=1.

Решение должно охватывать как минимум эти три случая:

  1. Исходный запрос не имеет параметров запроса
  2. Исходный запрос имеет параметры запроса, но не добавляется параметр
  3. Исходный запрос уже содержит добавляемый параметр запроса.

person Epigene    schedule 12.05.2016    source источник


Ответы (1)


Чтобы переписать путь, вы можете использовать ключевое слово rewrite, например

location /path/to/resource {
rewrite /some/other/path/$is_args$args;   
}

Для пересылки параметров добавление $args добавит параметры запроса, если они есть, и будет пустым, если параметры запроса не переданы.

Для условного добавления нового параметра, такого как id=1, если конструкция может использоваться в таком месте, как:

location /path/to/resource {
if($args !~* "id"){
rewrite /some/other/path/$is_args$args&id=1;  
} 
}

Выше будет добавлено поле «id», если оно отсутствует во входящем URL-адресе.

person sallu    schedule 20.05.2016
comment
Что произойдет, если параметры запроса отсутствуют? Разве это не будет выглядеть как /some/other/path/?&id=1? - person Epigene; 23.05.2016
comment
Верно.. Но я пытаюсь сказать, что вы можете поставить несколько условий if, чтобы проверить, имеет ли $args какое-либо значение, и они соответственно формируют URL-адрес перезаписи. - person sallu; 23.05.2016