如何使用Nginx进行URL重定向

时间:2020-01-09 10:39:35  来源:igfitidea点击:

说明

我们可以使用以我们的Nginx配置编写的重定向规则来对抗404. 这些规则可以向Web浏览器,搜索引擎以及内容已永久移动的任何内容提出建议,或者我们建议内容只是暂时移动。无论哪种方式,我们都有机会以透明的方式将用户引导到内容的新位置。

永久性临时

存在两种类型的重定向。正如我们可能从标题中发现的那样,我们可以根据需要执行永久重定向(301)或者临时重定向(302)。永久重定向告诉用户代理(包括搜索引擎)更新其索引,以将链接替换为新位置,而临时重定向则指示用户代理继续使用旧的重定向,但遵循请求的新路径。

如果不确定重定向是否将是永久重定向,请始终从临时重定向开始。撤消永久重定向可能意味着用户将长时间无法访问内容或者应用程序。对于Web客户端,这意味着清除缓存后。但是,对于搜索引擎而言,更新可能需要几天或者几周的时间。

重定向域

我们可能需要将用户引导到一个全新的域,或者我们希望强制流量通过单个域来集中访问,例如" www"地址。

server {
     listen 80;
     server_name www.example.com
}
server {
     listen 80;
     server_name example.com
     return 301 http://www.example.com
}

我们还可以使用所谓的通配符域来重定向所有请求,除了那些去往特定域的请求。在下面的示例中,所有流量都重定向到www.example.com,不包括直接发送到www.example.com的请求和发送到www.myblog.com的请求。

server {
     listen 80;
     server_name www.myblog.com
}
server {
     listen 80;
     server_name www.example.com
}
server {
     listen 80;
     server_name _;
     return 301 http://www.example.com
}

重定向URI匹配

在我们的应用程序服务器的服务器块中,位置块用于与需要重定向的请求URI进行匹配。

server {
     listen 80;
     server_name example.com

     location = /post/learning-nginx-redirects {
          return 301 http://example.com/articles/nginx/how-to-do-redirects/
     }
}

匹配网址

有时,我们想使用正则表达式根据某种模式与多个URI进行匹配,而有时我们想与以特定字符串开头的任何内容进行匹配,最后,我们可能希望与一个确切的字符串进行匹配。

确切的URI

当我们想匹配一个确切的URI时,我们将编写以下规则。

location = /post/learning-nginx-redirects {
     return 301 http://example.com/articles/nginx/how-to-do-redirects/
}

匹配的URI路径

有时我们可能想重定向特定路径下的任何内容。路径匹配和精确URI匹配之间的唯一区别是缺少等号。

location /post {
     return 301 http://example.com/articles
}

匹配的URI模式

location ~ ^/post/(.*) {
     rewrite ^ http://newexample.com/articles/;
}

创建临时重定向

使用return选项时,我们使用状态码302将重定向设置为临时。

location /post {
     return 302 http://example.com/articles
}

创建永久重定向

使用return选项时,我们使用状态码301将重定向设置为永久重定向。

location /post {
     return 301 http://example.com/articles
}