Назад | Перейти на главную страницу

перезапись 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; }

без везения. Как это можно было сделать?

Очевидно, вам не нужно настраивать цепочку перезаписей (похоже, вы пытаетесь). Это было бы неправильным способом:

/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
}