Назад | Перейти на главную страницу

Хост расположения nginx без www

Мне нужно перенаправить www.example.com/docs/....pdf на trader.example.com/docs/....pdf в существующем проекте. То же самое и с * .biz. Понятия не имею, как извлечь wwww-Part из $ host-Variable.

server {
        listen 80;
        server_name www.example.com www.example.biz;

        location /docs {
                        root /data/http/example/docs;
                        rewrite ^ $scheme://trader.$host$request_uri;
        }
}

Кто-нибудь знает, как я могу это решить?

Добро пожаловать в ServerFault.

Вы можете использовать карта директива для извлечения части $host значение, например следующее ...

map $host $tld {
    default $host;
    '~^www\.(?<domain>.*)$' $domain;
}

server {
    listen 80;
    server_name www.example.com www.example.biz;

    location /docs {
        root /data/http/example/docs;
        return $scheme://trader.$tld$request_uri;
    }
}

map директива помогает извлечь значение $tld что не содержит www. часть URL-адреса. В качестве оффтопа использовать не обязательно rewrite заявление. Поскольку в приведенном выше коде нет оценки регулярного выражения, return предпочтительнее для более быстрого выполнения оператора.

Вы можете удалить все www из ваших доменов. Эта конфигурация должна помочь.

server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

server {
    server_name www.example.biz;
    return 301 $scheme://example.biz$request_uri;
}

server {
        listen 80;
        server_name example.com example.biz;

        location /docs {
                        root /data/http/example/docs;
                        rewrite ^ $scheme://trader.$host$request_uri;
        }
}

Обновить: Если вы предпочитаете отбрасывать www из нескольких имен хостов, вы можете добавить в серверный блок, который будет улавливать имена хостов (примечание: если возможно, лучше приведенное выше).

if ($host ~* www\.(.*)) {
  set $host_without_www $1;
  rewrite ^(.*)$ $scheme://$host_without_www$1 permanent; #1
  #rewrite ^ $scheme://$host_without_www$1request_uri permanent; #2
}