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

Как перенаправить запросы на другой домен / URL-адрес с помощью nginx

Я пытаюсь перенаправить всех пользователей, переходящих на URL "http://example.com/something"на URL вроде"http://answares.com/examples_com/something".

Я пытаюсь использовать такой код:

server {
  listen 1.2.3.4:80;
  server_name "example.com";
  rewrite ^(.*) http://answares.com/examples_com$1 permanent;
}

Получив доступ к "http://example.com/"Меня перенаправляют на"http://answares.com/examples_com/", но получив доступ"http://example.com/something"Меня перенаправляют на:"http://answares.com/something".

Я пытался сделать это разными способами, но лучшее, что у меня получилось, было:

http://answares.com/examples_com//something

Что из-за двух косых черт выглядит неубедительно. Я использую Nginx 0.7.65 в Ubuntu 10.4

Если вы просто хотите перенаправить /somethingи никаких других URL-адресов, тогда:

rewrite ^(/something.*) http://answares.com/examples_com$1 permanent;

Это отправит запрос на http://example.com/something/ к http://answares.com/examples_com/something/,

и скажи, http://example.com/something/somewhere/page.html к http://answares.com/examples_com/something/somewhere/page.html

Вы можете сделать либо:

 rewrite ^/(.*)$ http://answares.com/examples_com/$1 permanent;

Это приносит вам:

$ curl -I http://xxxxx.com/some/example/url/here.html

HTTP/1.1 301 Moved Permanently
Server: nginx/0.8.53
Date: Mon, 05 Sep 2011 13:48:23 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: http://answares.com/examples_com/some/example/url/here.html

или

rewrite ^(/.*)$ http://answares.com/examples_com$1 permanent;

Вы можете видеть, что это тоже работает:

$ curl -I http://xxxxxx.com/some/example/url/here.html

HTTP/1.1 301 Moved Permanently
Server: nginx/0.8.53
Date: Mon, 05 Sep 2011 13:47:09 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: http://answares.com/examples_com/some/example/url/here.html

Разница между перенаправлением nginx и перенаправлением mod_rewrite заключается в том, что nginx не удаляет косую черту (/) после имени сервера перед сопоставлением.

Чтобы удалить двойные косые черты, которые у вас есть, вы должны сначала сопоставить косую черту в регулярном выражении без скобок, а затем применить сопоставление; или сопоставить все и применить сопоставление без скобок. Использовать так или иначе - дело вкуса ;-)

Самый быстрый способ - сделать return вместо переписывания. посмотреть здесь:

nginx перенаправляет на www.domain

Я просто ответил на связанный вопрос и наткнулся на этот.

Если вы используете NGINX с http2 - IP-адреса могут поддерживать более одного сертификата SSL. Создайте конфигурацию для старого домена и используйте действительное перенаправление SSL на новый домен.

В этом примере я перенаправляю http и https отдельно, используя постоянное перенаправление 301 на новый домен ;-)

Обязательно измените там блокировку SSL на свой собственный сертификат и настройки SSL.

server {

   listen 80;
   server_name old-domain.com;

   location / {
    return 301 https://new-domain.com;
   }

}
server {
    listen 443 ssl http2;
    server_name old-domain.com;

    ssl on;

    #Certificate here
    ssl_certificate /etc/letsencrypt/live/old-domain.com/fullchain.pem;t
    ssl_certificate_key /etc/letsencrypt/live/old-domain.com/privkey.pem;

    ssl_session_timeout 5m;
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:AES128:AES256:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK;

    location / {
        return 301 https://new-domain.com;
    }

}

Это позволит избежать предупреждений о конфиденциальности о несовпадении сертификатов SSL во время перенаправления.