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