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

Как удалить ключ запроса GET в NGINX и использовать значение GET в качестве 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

Любая помощь будет принята с благодарностью.

Первым делом, ^~ использование не обязательно, если у вас нет регулярного выражения, соответствующего этому шаблону до местоположения, которое вы определяете. То, что вы хотите сделать, это в основном иметь правильные 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;
}