У меня есть скрипт проверки электронной почты, который выглядит так:
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;
}