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; }
без удачи Как это можно сделать?
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
}