URL-адреса со слешем в конце и без него рассматриваются веб-серверами, а также поисковыми системами как различные веб-страницы.
По этой причине URL-адреса оканчивающиеся слешем могут возвращать ошибку 404 Not Found, в то время как без него они могут быть вполне доступны.
В этой заметке я покажу, как убирать слеш в конце URL в Nginx и делать proxy_pass
трафика без него.
Дельный Совет: Reload Nginx внутри Docker-контейнера! Читать далее →
`proxy_pass` в Nginx Без Слеша В Конце
Добавьте следующее rewrite-правило в секции server
конфигурационного файла Nginx для удаления слеша в конце всех URL и перенаправления трафика с помощью proxy_pass
в upstream-кластер:
server { listen 80; server_name example.tld; # Remove trailing slash from URLs rewrite ^/(.*)/$ /$1 permanent; location / { proxy_pass http://$upstream; proxy_redirect off; } }
Правило, приведенное выше, делает 301 Moved Permanently редирект со всех URL-адресов оканчивающихся слешем на те же самые URL без слеша в конце:
$ curl -IL http://example.tld/path/ HTTP/1.1 301 Moved Permanently server: nginx location: http://example.tld/path ... HTTP/1.1 200 server: nginx ...