2011-05-18 31 views

回答

179

server_name支持后缀使用.mydomain.com来语法相符:

server { 
    server_name .mydomain.com; 
    rewrite^http://www.adifferentdomain.com$request_uri? permanent; 
} 

或任何版本0.9.1或更高:

server { 
    server_name .mydomain.com; 
    return 301 http://www.adifferentdomain.com$request_uri; 
} 
+0

我是否需要加入港口进行聆听?例如听80.我有多个域,我需要重定向到主域,但我的服务器也有多个虚拟服务器的各种其他域。 – Ryan 2013-01-25 22:26:57

+1

@Ryan未指定时,'listen'指令缺省为端口80。这实际上比一般情况稍微复杂一点;请参阅[nginx配置文档](http://wiki.nginx.org/HttpCoreModule#Directives)以获取更多详细信息。 – Yitz 2013-09-23 17:17:21

+2

'?'在最后得到了什么? – 2014-07-04 00:26:15

10

这应该通过HTTPRewriteModule工作。

实施例从www.example.com重写到example.com:

server {  
    server_name www.example.com;  
    rewrite^http://example.com$request_uri? permanent; 
} 
+0

这只是重定向www.example.com吨o example.com。我想重定向到一个不同的域。我能以一个规则来做到吗? – deb 2011-05-18 13:12:10

+0

我不确定,但我认为 server_name mydomain.com;重写www.adifferentdomain.com永久; } 应该这样做吗? 这应该采取一切* .mydomain.com? – udo 2011-05-18 13:25:32

+0

@deb你只需要'server_name example.com www.example.com;'。 – citruspi 2012-08-22 16:15:07

8

为什么使用重写模块,如果可以的话return?从技术上讲,return是重写模块的一部分,作为you can read here,但此代码段更易于阅读imho。

server { 
    server_name .domain.com; 

    return 302 $scheme://forwarded-domain.com; 
} 

你也可以给它一个301重定向。

+1

这会保持路径和查询参数吗? – mpen 2014-12-30 21:56:26

+2

没有这个例子不会这样做@Mark。但我想你可以混淆以前的答案来得到这样的东西:'return 302 $ scheme://forwarded-domain.com$request_uri;' – 2015-01-05 15:12:40

+0

在附注中,在很多情况下,你应该只是重定向到https而不是保留该方案(即使用https而不是$方案)。这是出于同样的原因现在认为不赞成使用协议相关链接 - http://www.paulirish.com/2010/the-protocol-relative-url/ – mahemoff 2015-04-29 08:36:36

2

如果你想重定向请求 “domain1.com” 到 “domain2.com”,你可以创建一个服务器块,看起来像这样:

server { 
    listen 80; 
    server_name domain1.com; 
    return 301 $scheme://domain2.com$request_uri; 
} 
相关问题