Nginx 基于 Lua 将用户重定向至其语言浏览器对应的页面

我有一个 Wordpress 多站点的 Nginx 网站,并一直在寻找一种基于用户浏览器语言进行重定向的方法。

感谢 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
        ';
    }
    

欢迎提供帮助。

点赞