如何使用 nginx 将请求重定向到不同的域/url

如何使用 nginx 将请求重定向到不同的域/url

我正在尝试将所有用户重定向到 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

因为有两个斜杠,所以看起来不太好。我在 Ubuntu 10.4 上使用 Nginx 0.7.65

答案1

最快的方法是执行return而不是重写。看这里:

nginx 重定向到 www.domain

我刚刚回答了链接的问题并偶然发现了这个问题。

答案2

如果您只想重定向/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.htmlhttp://answares.com/examples_com/something/somewhere/page.html

答案3

您可以执行以下任一操作:

 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 在匹配之前不会删除服务器名称后的斜杠 (/)。

为了删除双斜杠,您应该首先匹配正则表达式中的斜杠而不使用括号,然后应用匹配;或者匹配所有内容并应用不带括号的匹配。使用哪种方法只是个人喜好问题 ;-)

答案4

如果您使用带有 http2 的 NGINX - IP 可以支持多个 SSL 证书。为旧域创建配置并使用其有效的 SSL 重定向到新域。

在此示例中,我使用永久 301 重定向分别将 http 和 https 重定向到新域名 ;-)

请确保将那里的 SSL 块更改为您自己的 SSL 证书和设置。

服务器 {

   听80;
   服务器名称旧域名.com;

   地点 / {
    返回 301 https://new-domain.com;
   }

}
服务器 {
    监听443 ssl http2;
    服务器名称旧域名.com;

    ssl 开启;

    #证书在这里
    ssl_certificate /etc/letsencrypt/live/old-domain.com/fullchain.pem;t
    ssl_certificate_key /etc/letsencrypt/live/old-domain.com/privkey.pem;

    ssl_会话_超时5分钟;
    ssl_协议SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers开启;
    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- SHA3​​84: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:!导出:!DES:!3DES:!MD5:!PSK;

    地点 / {
        返回 301 https://new-domain.com;
    }

}

这将避免在重定向期间出现有关 SSL 证书不匹配的任何隐私警告。

相关内容