Nginx 重定向

Posted by cl9000 on May 19, 2020

达到完美境界并不是无以复加,而是无可去除。——<安托万·德·圣·埃克苏佩里>

几乎每个网站都需要重定向。许多网站决定通过www和非www网站为他们的访问者提供服务,只是以防用户在浏览器中输入它。
但对于搜索引擎优化来说,当你在两个不同的域名上使用同一个网站时,这就不好了。下面是如何用 Nginx 解决这个问题。

用if语句重定向www到非www

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;

server_name www.example.com example.com;

if ($host = 'www.example.com' ) {
# redirecting www.example.com to example.com
# path, query string are retained
rewrite ^/(.*)$ http://example.com/$1 permanent;
}
}

请注意,NGINX配置中,if 被认为是邪恶的http://wiki.nginx.org/IfIsEvil
但在这种情况下是完全OK的。官方文件称,有两种情况下if是“100%安全的”:

  • 重定向(我们的示例中)
  • 返回
1
2
3
4
5
6
if ($request_method = POST ) {
return 405;
}
if ($args ~ post=140){
rewrite ^ http://example.com/ permanent;
}

不用if声明将www重定向到非www

在这种情况下,技巧是我们必须定义两个服务器块。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
server_name www.example.com;

# redirecting www.example.com to example.com
# path, query string are retained
return 301 http://example.com$request_uri;
}

server {
listen 80;
server_name example.com;
...
}

将非www重定向到www

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80;
server_name example.com;

# redirecting example.com to www.example.com
# path, query string are retained
return 301 http://www.example.com$request_uri;
}

server {
listen 80;
server_name www.example.com;
...
}

参考

关注【公众号】,了解更多。



支付宝打赏 微信打赏

赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!