Редирект с http на https без слэша в конце, как реализовать в nginx?

Как сделать редирект с http на https без слэша в конце в nginx?

Есть такой конфиг:

server {
    server_name test.com;

    listen 192.168.17.175:80;

    return 301 https://$host$request_uri;

    error_log /var/www/test.com/data/logs/test.com-frontend.error.log;
    access_log /var/www/test.com/data/logs/test.com-frontend.access.log;
}


server {
    server_name www.test.com  ;
    listen 192.168.17.175:80;
    listen 192.168.17.175:443 ssl http2 ;

    ssl_certificate "/var/www/httpd-cert/test.com_2021-09-15-05-44_21.crt";
    ssl_certificate_key "/var/www/httpd-cert/test.com_2021-09-15-05-44_21.key";

    add_header Strict-Transport-Security "max-age=31536000" always;

    return 301 $scheme://test.com$request_uri;

    error_log /var/www/test.com/data/logs/test.com-frontend.error.log;
    access_log /var/www/test.com/data/logs/test.com-frontend.access.log;
}


Если ввести curl -I http://test.com/ то получается что редиректит на https://test.com/ со слэшем в конце, а как сделать без?
Правило реврита пробовал:
rewrite ^/(.*)/$ /$1 permanent;
Не работает, если без http, то работает редирект без слэша.
  • Вопрос задан
  • 367 просмотров
Пригласить эксперта
Ответы на вопрос 2
fzfx
@fzfx
18,5 дм
редирект на https://test.com/ без слеша на конце никак не сделать, поскольку в URL после имени домена в обязательном порядке идёт слеш.
Ответ написан
Lynn
@Lynn
nginx, js, css
Часть path в протоколе HTTP не может быть пустой. Когда вы в браузере вводите только домен, он сам дописывает /.

Просто потому что реально запрос выгдядит так:
#   ↓ вот это path и он не может быть пустым
GET / HTTP/1.1
Host: test.com
... прочие заголовки


И отвечая mureevms, curl тоже допишет слеш. Вот * Rebuilt URL to: http://ya.ru/
$ curl -v 'http://ya.ru'
* Rebuilt URL to: http://ya.ru/
*   Trying 2a02:6b8::2:242...
* TCP_NODELAY set
* Connected to ya.ru (2a02:6b8::2:242) port 80 (#0)
> GET / HTTP/1.1
> Host: ya.ru
> User-Agent: curl/7.58.0
> Accept: */*
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы