перезапись nginx на основе части URL

Я пытаюсь настроить перезапись 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; }

безуспешно. Как это можно было сделать?

0
задан 21 February 2019 в 17:01
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
}
0
ответ дан 24 November 2019 в 00:50

Теги

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