基于浏览器语言

时间:2017-02-03 12:42:36

标签: redirect nginx lua

我有一个带有nginx的wordpress多站点,我一直在尝试找到一种基于浏览器语言重定向用户的方法。

感谢MarkJoris我在大多数情况下能够重定向,但我遇到了一个问题。

以下是我的情况和代码供您参考。

  1. 我的情况
    • 我的多站点设置位于子域中。我的主要网站是韩文,其他两个网站是日文和英文。
    • 显然我想将日本用户重定向到日语网站,将国际用户重定向到英文网站,我想我想出来了。
    • 但是,如果我想从子域名网站访问韩国主要网站,我会不断重定向回jp.domain.com或en.domain.com。这样的用例不会很多,但我认为这应该是可能的。
  2. 代码

    location = / {
        default_type text/html;
    
        rewrite_by_lua '
        if ngx.var.cookie_lang == "ko" then
            return
        elseif ngx.var.cookie_lang == "ja" then
            ngx.redirect("http://jp.domain.com/")
            return
        elseif ngx.var.cookie_lang == "en" then
            ngx.redirect("http://en.domain.com/")
            return
        end
    
        if ngx.var.http_accept_language then
            for lang in (ngx.var.http_accept_language .. ","):gmatch("([^,]*),") do
                if string.sub(lang, 0, 2) == "ko" then
                    ngx.header["Set-Cookie"] = "lang=ko; path=/"
                    return
                elseif string.sub(lang, 0, 2) == "ja" then
                    ngx.header["Set-Cookie"] = "lang=ja; path=/"
                    ngx.redirect("http://jp.domain.com/")
                    return
                end
            end
        end
    
        ngx.header["Set-Cookie"] = "lang=en; path=/"
        ngx.redirect("http://en.domain.com/")
        ';
    }
    
    location / {
        try_files $uri $uri/ /index.php?$args;
        rewrite_by_lua '
        if ngx.var.arg_lang == "ko" then
            ngx.header["Set-Cookie"] = "lang=ko; path=/"
        elseif ngx.var.arg_lang == "ja" then
            ngx.header["Set-Cookie"] = "lang=ja; path=/"
        elseif ngx.var.arg_lang == "en" then
            ngx.header["Set-Cookie"] = "lang=en; path=/"
        end
        ';
    }
    
  3. 任何帮助都将不胜感激。

0 个答案:

没有答案