NGINX用语言后缀重写根URL

时间:2016-03-11 20:15:40

标签: nginx

我正在尝试向NGINX配置添加一个简单的规则,其中根网址www.example.com始终使用语言后缀www.example.com/en/重写。我试过这个:

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

    location / {
        rewrite ^$ www.example.com/en/ permanent;
    }

    ...
}

但没有运气。我哪里错了?此外,是否可能有一个条件,NGINX检查是否有/en/后缀,如果没有,添加一个?

修改

所以我距离我最初想要的只有一个角色:

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

    location / {
        # needed the / in between the anchor tags
        rewrite ^/$ www.example.com/en/ permanent;
    }

    ...
}

1 个答案:

答案 0 :(得分:3)

处理重定向有两种常用方法:

使用重写规则

server {
    ...
    rewrite ^/$ /en/ permanent;    
    ...
}

请注意,rewrite rules不一定是绝对网址,但如果 是绝对网址,则需要包含协议rewrite /x https://example.com/y;

没有必要在位置块中放置这样的重写规则。

使用位置块+返回30x

使用位置块需要使用与网址完全匹配的内容:

server {
    ...
    location = / {
        return 301 /en/;
    }
    ...
}

=的使用意味着规则匹配域根的请求,否则rules of location block precedence意味着位置块将成为所有域的默认值要求。 Return用于发布301(永久)重定向。