Я пытаюсь настроить перезапись nginx; Я успешно настроил его для удаления расширения:
https://example.com/accounts?id=user-123
указывает на https://example.com/accounts.php?id = user-123
с использованием только try_files:
location / {try_files $ uri $ uri / $ uri.html $ uri.php? $ args; }
Я хочу настроить вторую перезапись перед этим; все идентификаторы пользователей начинаются с user-
, поэтому example.com/user-sdgas3
следует переписать на example.com/accounts?id=user-sdgas3
, example.com/faq-abc8989as
следует переписать на example.com/faqpage?id=faq-abc8989as
, example.com/faq-abc8989as?view=true
переходит на example.com/faqpage?id=faq-abc8989as&view=true
и т. д.
Я просто пытался добавить варианты этого в самое начало для каждого расширения URL:
location ^ / faq - (*) $ {try_files $ faqpage? id = $ 1; }
безуспешно. Как это можно было сделать?
Очевидно, вам не нужно настраивать цепочку перезаписей (похоже, вы пытаетесь это сделать). Это был бы неправильный способ делать что-то:
/ user-123 -> / accounts? Id = user-123 -> /accounts.php?id=user-123
... потому что, очевидно, вы можете / должны перепишите прямо в файл обработчика PHP:
/ user-123 -> /accounts.php?id=user-123
Не похоже, что у вас есть один маршрутизатор точки входа PHP (стандартный подход). Если у вас было это, тогда try_files
было бы достаточно. Но поскольку у вас много файлов-обработчиков .php
, вам придется использовать для них rewrite
.
Таким образом:
rewrite ^/user-(.*) /accounts.php?id=user-$1 last;
rewrite ^/faq-(.*) /faq.php?id=$1 last;
# This is only needed if /index.php can handle /this or /that route
location / {
try_files $uri $uri /index.php$is_args$args;
}
location \.php$ {
... the usual stuff for PHP-FPM
}