Как выполнить несколько перенаправлений в NGINX - PullRequest
0 голосов
/ 06 июля 2018

Я делаю свой первый файл конфигурации nginx. У меня 2 гола:

  1. перенаправить все запросы не "www" на версию "www"
  2. перенаправить весь трафик, который раньше обслуживался в подкаталоге папки с IP-адресом

есть:

mysite.com >>> "www.mysite.com"

и

123.456.789.123 / BETA >>> "www.mysite.com"

Вот мой конфиг:

    server {
            listen 80;
            listen 443 ssl;
            server_name 123.456.789.123;
            return 301 $scheme://www.mysite.com$request_uri;
    }
    server {
            listen 80;
            listen 443 ssl;
            server_name mysite.com;
            rewrite ^(.*)$ $scheme://www.mysite.com$1;
            location ~* ^/BETA/ {
                    return 301 /;
            }
    }

mysite.com >>> "www.mysite.com" работает, но 123.456.789.123/BETA >>> Вместо этого "www.mysite.com" дает: "www.mysite.com/BETA"

Такое ощущение, что я здесь что-то не так делаю ... Должно ли быть 2 "серверных" блока? Если так, как я должен структурировать это, чтобы использовать один? Является ли «location» правильным способом переписать подкаталог в корень? Может быть, это вызывает конфликт с перезаписью в том же блоке сервера? Должен ли я создать третий серверный блок для перезаписи подкаталога в корневой каталог? Есть ли способ напрямую переписать 123.456.789.123/BETA на www.mysite.com?

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 06 июля 2018

Из документации: https://www.nginx.com/blog/creating-nginx-rewrite-rules/

Это должно сделать это, я изменил ваш код для перенаправления 123.456.789.123/BETA на www.mysite.com (просто удалите $ request_uri для запросов на 123.456.789.123/BETA). Для любых других страниц, запрошенных 123.456.789.123, таких как 123.456.789.123/foo, будет перенаправлен на www.mysite.com/foo.

server {
        listen 80;
        listen 443 ssl;
        server_name 123.456.789.123;
        location = /BETA {
                return 301 $scheme://www.mysite.com;
        }
        return 301 $scheme://www.mysite.com$request_uri;
}
server {
        listen 80;
        listen 443 ssl;
        server_name mysite.com;
        rewrite ^(.*)$ $scheme://www.mysite.com$1;
}

Если вы хотите перенаправить подстраницы / BETA, такие как / BETA / foo, также на www.mysite.com, удалите «=» в этой строке перед /BETA.

РЕДАКТИРОВАТЬ: Не уверен, что это было ясно, но вам понадобится третий блок сервера с именем_сервера www.mysite.com, который фактически обслуживает ваш сайт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...