Nginx 301 通过变量重定向
Nginx 301 Redirect by variable
我正在为我托管的网站设置 301 重定向服务器。当我有一个新客户时,我不想去编辑下面服务器块中的域列表。我想将 anydomain-here.com 重定向到 301 -> www.anydomain-here.com
而不是 nginx 配置中的硬编码域
所有裸域(即 domain.com)都将重定向到 www。domain.com
server {
server_name domain-requested.com;
rewrite ^/(.*)$ http://www.domain-requested.com/ permanent;
}
在上面的示例中,是否可以将域请求更改为变量?这将允许服务器重定向任何没有子域的站点,例如 www.
您可以使用 Nginx 1.4.6 摆脱至少一个硬编码域名:
rewrite ^/(.*)$ http://www.$server_name/ permanent;
您可以通过将其放入所有服务器块都包含的包含文件来进一步抽象它。你不能比单独使用 Nginx 做得更好,因为 rewrite
不允许在 http
上下文中声明以应用于多个 server
块。
需要考虑的其他一些想法:
- 使用模板系统来管理您的 Nginx 配置。
- 许多 DNS 提供 HTTP 重定向服务,因此他们的网络服务器将是接收请求和接收重定向的服务器。
以上两种方法我都用过。使用 DNS 提供商进行 HTTP 重定向的缺点是它们不处理传入的 SSL 请求,但如果您打算购买并安装第二个 SSL 证书只是为了自己处理第二个域上的 HTTPS 重定向,那么这只是一个缺点。
如果使用裸域,您可以使用映射来设置变量:
map $host $anydomain_here {
# capture bare domain & store in variable $anydomain_here
~^(?<anydomain>[^\.]+)\.com$ $anydomain;
}
server {
listen 80 default_server;
server_name _;
if ($anydomain_here) {
# redirect if a bare domain was matched
return 301 $scheme://www.$anydomain_here.com$uri;
}
}
我正在为我托管的网站设置 301 重定向服务器。当我有一个新客户时,我不想去编辑下面服务器块中的域列表。我想将 anydomain-here.com 重定向到 301 -> www.anydomain-here.com
而不是 nginx 配置中的硬编码域所有裸域(即 domain.com)都将重定向到 www。domain.com
server {
server_name domain-requested.com;
rewrite ^/(.*)$ http://www.domain-requested.com/ permanent;
}
在上面的示例中,是否可以将域请求更改为变量?这将允许服务器重定向任何没有子域的站点,例如 www.
您可以使用 Nginx 1.4.6 摆脱至少一个硬编码域名:
rewrite ^/(.*)$ http://www.$server_name/ permanent;
您可以通过将其放入所有服务器块都包含的包含文件来进一步抽象它。你不能比单独使用 Nginx 做得更好,因为 rewrite
不允许在 http
上下文中声明以应用于多个 server
块。
需要考虑的其他一些想法:
- 使用模板系统来管理您的 Nginx 配置。
- 许多 DNS 提供 HTTP 重定向服务,因此他们的网络服务器将是接收请求和接收重定向的服务器。
以上两种方法我都用过。使用 DNS 提供商进行 HTTP 重定向的缺点是它们不处理传入的 SSL 请求,但如果您打算购买并安装第二个 SSL 证书只是为了自己处理第二个域上的 HTTPS 重定向,那么这只是一个缺点。
如果使用裸域,您可以使用映射来设置变量:
map $host $anydomain_here {
# capture bare domain & store in variable $anydomain_here
~^(?<anydomain>[^\.]+)\.com$ $anydomain;
}
server {
listen 80 default_server;
server_name _;
if ($anydomain_here) {
# redirect if a bare domain was matched
return 301 $scheme://www.$anydomain_here.com$uri;
}
}