Я удалил суффикс «.php» в конце файлов PHP на сервере Nginx с помощью следующего кода, но на этот раз я не могу отправить некоторые данные на сервер.

try_files $uri/ $uri.html $uri.php$is_args$query_string;

Некоторые ссылки на сайте отправляются с помощью Ajax, и расширение «.php» в конце этих ссылок недоступно. Например; https://panel.example.com/app/controller/ajax/собирать

Например, когда я хочу получить доступ к файлу «/collect», к которому я хочу получить доступ через Ajax или напрямую, я получаю сообщение об ошибке «Файл не найден». Потому что я «переписываю» приведенный ниже код и предоставляю чистый URL.

rewrite ^/([^/]+)/([^/]+)?$ /index.php?cmd=$1&scd=$2 last;
rewrite ^/([^/]+)/?$ /index.php?cmd=$1 last;

Пример ссылки: https://panel.example.com/[details|cat|profile]/[subPages(productID, имя пользователя..)]

В результате приведенные выше коды корректны и работают, но не работают одновременно вместе. Как я могу запустить эти два кода одновременно?

Полный файл виртуального хоста Nginx

answer

Вы можете попробовать следующий подход:

location ~ ^/(?<cmd>[^/]+)/(?<scd>[^/]+) {
    try_files /index.php?cmd=$cmd&scd=$scd =404;
}

location ~ ^/(?<cmd>[^/]+)/ {
    try_files /index.php?cmd=$cmd =404;
}

location / {
    try_files $uri/ $uri.html $uri.php$is_args$args;
}

Здесь мы используем алгоритм сопоставления местоположения nginx, чтобы сначала проверить соответствие URL-адреса регулярным выражениям, а затем предпринять соответствующие действия для этого URL-адреса.

Я использую именованные захваты здесь ?<cmd>, чтобы сделать имена переменных более понятными.

Кроме того, ?$часть в конце регулярного выражения удаляется, так как это не имеет значения. Оба ?$и пустые соответствуют любой строке.