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