首页 > 解决方案 > Nginx 重定向规则没有影响

问题描述

尝试做一个简单的重定向:

rewrite https://url.example.com(.*) https://example.com/plugins/url permanent;

任何时候url.example.com被击中,我都希望它重定向到那个特定的路径。

编辑:

将尝试更好地解释这一点,因为我试图从另一个重定向到特定域。

server {
    server_name example.com plugin.example.com;
    root /home/www/example.com/public;
}

我看到location用于重定向,例如:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

但不确定如何在我的情况下使用它,即更改plugin.example.comexample.com/plugin.

例如:

http://plugin.example.com
https://plugin.example.com
https://plugin.example.com/blah
https://plugin.example.com/blah/more

所有这些都应该重定向到:

https://example.com/plugin

标签: nginxredirecturl-rewriting

解决方案


如果原始 URL 是https://url.example.comorhttps://url.example.com/那么rewriteandlocation指令使用的规范化 URI 将是/. 方案、主机名和查询字符串都已被删除。

要执行永久重定向到具有不同主机名的 URL:

使用rewrite(详见本文档):

rewrite ^/$ https://example.com/foo permanent;

或使用locationand return(有关详细信息,请参阅本文档):

location = / {
    return 301 https://example.com/foo;
}

第二种解决方案更有效,因为没有要处理的正则表达式

如果原始 URL 包含查询字符串:rewrite除非添加尾随,否则将自动附加它?。遗嘱不是,但可以通过return附加来添加$is_args$args


如果方案和主机名不变,那么这两个语句都可以简化:

rewrite ^/$ /foo permanent;

或者:

location = / {
    return 301 /foo;
}

推荐阅读