У меня есть простой сайт Nginx, который запускает один PHP-файл независимо от URL (за исключением файлов CSS/JS, которые обслуживаются нормально)
Однако, что бы я ни делал и ни тестировал в нескольких браузерах, всякий раз, когда я включаю параметры GET/URL, он добавляет завершающий слеш прямо перед ?
. Например:
example.com?test=1
перенаправляет на =>example.com/?test=1
example.com/path?test=1
перенаправляет на =>example.com/path/?test=1
Это конфигурация, которую я сейчас использую.
index index.html index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_index index.php;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Кто-нибудь знает, как этого избежать?
решение1
Я думаю, что вы попались на одно из обсуждаемых правил nginx здеськоторый говорит...
Если местоположение определено префиксной строкой, которая заканчивается символом слеша, и запросы обрабатываются одним из proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass или grpc_pass, то выполняется специальная обработка. В ответ на запрос с URI, равным этой строке, но без завершающего слеша, будет возвращено постоянное перенаправление с кодом 301 на запрошенный URI с добавленным слешем. Если это нежелательно, точное совпадение URI и местоположения можно определить следующим образом:
и есть еще обсуждение. Я думаю, что ваш пример URI на самом деле обрабатывается первой спецификацией местоположения (которая, очевидно, заканчивается слешем), поэтому к URI запроса добавлен слеш.
Спецификация местоположения, например, location ~ .*$ { commands; }
может работать лучше