尝试进行简单的重定向:
rewrite https://url.example.com(.*) https://example.com/plugins/url permanent;
无论何时url.example.com
被击中,我都希望它重定向到该特定路径。
答案 0 :(得分:0)
如果原始URL是https://url.example.com
或https://url.example.com/
,则rewrite
和location
伪指令使用的规范化URI将是/
。方案,主机名和查询字符串均已删除。
要永久重定向到具有不同主机名的URL:
使用rewrite
(有关详细信息,请参见this document)
rewrite ^/$ https://example.com/foo permanent;
或使用location
和return
(有关详细信息,请参见this document)
location = / {
return 301 https://example.com/foo;
}
第二种解决方案效率更高,因为没有要处理的正则表达式。
如果原始URL包含查询字符串:除非添加了结尾的rewrite
,否则?
将自动附加它。 return
不会,但是可以通过附加$is_args$args
来添加。
如果方案和主机名未更改,则可以简化两个语句:
rewrite ^/$ /foo permanent;
或者:
location = / {
return 301 /foo;
}
答案 1 :(得分:0)
您可以为example.com和plugin.example.com创建单独的服务器。并在plugin.example.com服务器内部创建重定向。
server {
server_name plugin.example.com;
return 301 https://example.com/plugin;
}
server {
server_name example.com;
root /home/www/example.com/public;
}
答案 2 :(得分:0)
您是否需要从子域重定向到主站点上的子文件夹?
最好通过单独的server
上下文和适当的server_name
规范来实现。
server_name
的匹配(推荐):server {
server_name plugin.example.com;
return 301 $scheme://example.com/plugin$request_uri;
}
server {
server_name about.example.com;
return 301 $scheme://example.com/about$request_uri;
}
server {
server_name ~^(?:www\.)?(?<subdomain>.*)\.example\.com$;
return 301 $scheme://example.com/$subdomain$request_uri;
}
server {
server_name ~^(?:www\.)?(?<subdomain>plugin|about)\.example\.com$;
return 301 $scheme://example.com/$subdomain$request_uri;
}
if
:server {
server_name .example.com;
…
if ($host = plugin.example.com) {
return 301 $scheme://example.com/plugin$request_uri;
}
if ($host = about.example.com) {
return 301 $scheme://example.com/about$request_uri;
}
…
}
server {
server_name .example.com;
…
if ($host ~ ^(?:www\.)?(?<subdomain>plugin|about)\.example\.com$) {
return 301 $scheme://example.com/$subdomain$request_uri;
}
…
}
请参阅http://nginx.org/r/server_name,详细了解哪种方法最适合您。