Как передать GET параметры в PHP? (Nginx)

location / {
    try_files $uri $uri/ /index.php?do=user&po=$1$is_args$args;
}

Необходимо, передать свои + те что будут в URL.

К примеру так, как выше написано, в PHP:

$_GET

Содержит массив из 2: do и po.

Если пользователь допишет свои параметры, к примеру:

/index.php?do=user&po=2&g=5

В PHP по прежнему $_GET будет содержать 2 параметра.

Не понимаю, как сделать чтобы и свои были по умолчанию и пользовательские?

Чтобы с пользовательскими GET можно было работать...


Ответы (1 шт):

Автор решения: Ivan Shatsky

Нет, если переходить в новый location, используя в качестве последнего параметра директивы try_files URI, а не имя именованного локейшена, URI будет использован именно в том виде, в каком он указан в конфигурации, аргументы запроса сохранены не будут, так что @AlexeyTen в данном случае не прав.

Можно использовать блок map:

map $is_args $has_args {
    `?`  `&`;
}
server {
    ...
    location / {
        try_files $uri $uri/ /index.php?do=user&po=$1$has_args$args;
    }

Или можно пройти через дополнительный именованный location и добавить аргументы запроса к уже существующим с помощью директивы rewrite. Но в таком варианте переменная $1 будет перезатёрта при выполнении rewrite, и в том регулярном выражении, откуда она берётся, надо использовать именованные группы захвата (named captures), то есть вместо (...) использовать, например, (?<po>...). В таком случае вместо переменной $1 результат захвата попадёт в переменную $po.

location / {
    try_files $uri $uri/ @index;
}
location @index {
    rewrite ^ /index.php?do=user&po=$po;
}
→ Ссылка