【发布时间】:2011-08-28 01:13:30
【问题描述】:
如何使用 NGINX 将 mydomain.com 和任何子域 *.mydomain.com 重定向到 www.adifferentdomain.com?
【问题讨论】:
如何使用 NGINX 将 mydomain.com 和任何子域 *.mydomain.com 重定向到 www.adifferentdomain.com?
【问题讨论】:
我正在为我的网站使用此代码
server {
listen 80;
listen 443;
server_name .domain.com;
return 301 $scheme://newdomain.com$request_uri;
}
【讨论】:
您可以在 server {} 块内简单地编写一个 if 条件:
server {
if ($host = mydomain.com) {
return 301 http://www.adifferentdomain.com;
}
}
【讨论】:
临时重定向
rewrite ^ http://www.RedirectToThisDomain.com$request_uri? redirect;
永久重定向
rewrite ^ http://www.RedirectToThisDomain.com$request_uri? permanent;
在特定站点的 nginx 配置文件中:
server {
server_name www.example.com;
rewrite ^ http://www.RedictToThisDomain.com$request_uri? redirect;
}
【讨论】:
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;
}
【讨论】:
listen 指令在未指定时默认为端口 80。它实际上比一般情况要复杂一些。有关详细信息,请参阅nginx configuration docs。
?最后实现了什么?
rewrite和return 301 $scheme://www.adifferentdomain.com$request_uri;有什么区别?
$request_uri 已经有查询字符串,因此无需再次附加它。 return 301 语法较新,两种方法的行为应该没有区别,但是当我最初回答这个问题时,很多发行版都没有所需的版本,所以我选择了更安全的语法。
如果您想将“domain1.com”的请求重定向到“domain2.com”,您可以创建一个如下所示的服务器块:
server {
listen 80;
server_name domain1.com;
return 301 $scheme://domain2.com$request_uri;
}
【讨论】:
listen 443;
listen 443 ssl;
server {
server_name .mydomain.com;
return 301 http://www.adifferentdomain.com$request_uri;
}
http://wiki.nginx.org/HttpRewriteModule#return
和
【讨论】:
如果可以return,为什么还要使用重写模块?从技术上讲,return 是作为you can read here 重写模块的一部分,但这个 sn-p 更容易阅读恕我直言。
server {
server_name .domain.com;
return 302 $scheme://forwarded-domain.com;
}
你也可以给它一个 301 重定向。
【讨论】:
return 302 $scheme://forwarded-domain.com$request_uri;
这应该通过HTTPRewriteModule 工作。
示例从 www.example.com 重写为 example.com:
server {
server_name www.example.com;
rewrite ^ http://example.com$request_uri? permanent;
}
【讨论】:
server_name example.com www.example.com;。