Я хочу перенаправить URL-адреса с косой чертой на путь без косой черты в конце. Итак, / some-url / to / some-url для проблемы с дублированием контента
И остальные URL-адреса, например
/some-url.xml
/some-url?
/some-url/?
/some-url?q=v
/some-url/?q=v
/some-url
Должен остаться без перенаправления. я хочу прямо противоположный следующему вопросу. Как настроить перенаправление на url с завершающей косой чертой в nginx?





Пожалуйста, попробуйте внутри своего серверного блока:
rewrite ^/(.*)/$ /$1 permanent;
через: https://www.scalescale.com/tips/nginx/nginx-remove-trailing-slash/
Это ищет что-либо с URI запроса, начинающимся с '/' и заканчивающимся косой чертой ('$' в конце раздела поиска сразу после перезаписи), и заменяет его на '/' в начале и URI без косой черты в конце. В последней части указано, что он будет обслуживать 301 редирект.
Обновлять: Чтобы избежать удаления косой черты из URI с параметрами GET, попробуйте:
if ($query_string != "") {
rewrite ^/(.*)/$ /$1 permanent;
}
Обычно не рекомендуется использовать операторы if, но если бы вы использовали такую карту:
map $query_string $trailing_slash {
"" ""
default "/";
}
rewrite ^/(.*)/$ /$1$trailing_slash permanent;
это приведет к бесконечным перенаправлениям для любой строки с запросом, поскольку он будет перенаправлять на себя (как источник, так и место назначения будут иметь в себе завершающую косую черту). Следовательно, нам нужно использовать условное выражение для перезаписи.
После проверки всей конфигурации nginx я не нашел никаких других условий и условий AND (&&). наконец я сделал со свойством "set" в nginx
set $val 0;
if ($request_method ~ "^GET$"){
set $val 1;
}
if ($request_uri ~ ^/(.*)/$ ) {
set $val "${val}1";
}
location / {
if ($val ~ 11) { rewrite ^/(.*)/$ https://$host/$1; }
try_files $uri $uri/ /index.php$is_args$args;
}
это не соответствует some-url / ?, some-url /? q = v. для этих URL-адресов также выполняется перенаправление на some-url? , some-url? q = v