Как удалить ПОЛУЧИТЬ ключ запроса в NGINX и использовать ПОЛУЧИТЬ значение в качестве URI?

У меня есть сценарий подтверждения адреса электронной почты, который похож на это:

http://example.com/v/index.php?t=TOKEN_EMAILED_TO_CLIENT

И я хочу, чтобы это было похоже на это:

http://example.com/v/TOKEN_EMAILED_TO_CLIENT

По существу просто удаление index.php?t= часть URL, но все еще разрешение index.php файла обработать маркер.

Я попробовал следующие три настройки, и ни один из них не работал:

location /v/ {
    try_files index.php$args;
}

Вышеупомянутые результаты в неудавшемся nginx.conf файле

location ^~ /v/ {
    try_files /v/index.php?q=$uri;
}

Вышеупомянутые результаты в неудавшемся nginx.conf файле

location ^~ /v/ {
    rewrite ^/v/index.php?q=(.*)$ $1 permanent;
}

Вышеупомянутые передачи nginx.conf требования файла, но все еще не делает то, что я хотел бы. Это показывает 404 ошибки при посещении http://example.com/v/TOKEN_EMAILED_TO_CLIENT

Любая справка значительно ценилась бы.

1
задан 1 June 2015 в 00:14
1 ответ

Во-первых, использование ^ ~ не обязательно, если у вас нет регулярного выражения, соответствующего этому шаблону до местоположения, которое вы определяете. То, что вы хотите сделать, - это иметь правильные URI и переписать их, чтобы передать аргумент вашему приложению php. В этом случае подходящим решением является перезапись.

Здесь вы упустили то, что URI, с которым вы сопоставляете, является первым аргументом директивы перезаписи, поэтому он, очевидно, не может соответствовать ^ / v / index.php? Q = (. *) $ , поскольку он равен / v / TOKEN_EMAILED_TO_CLIENT . Второй аргумент директивы перезаписи - это URI, на который выполняется перезапись.

Итак, если у вас есть где-то такое местоположение, которое обрабатывает файлы .php :

location ~ \.php$ {
     [ ... ]
}

Тогда вам понадобится этот блок местоположения вместо:

location /v/ {
    rewrite ^/v/(.*)$ /v/index.php?t=$1? last;
}
3
ответ дан 3 December 2019 в 18:39

Теги

Похожие вопросы