2011-05-18 87 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; 
}