Переписать с помощью lua: Match host - PullRequest
0 голосов
/ 28 мая 2019

У меня есть сценарий lua , который перенаправляет пользователя на основе его браузера.

location = / {
    rewrite_by_lua '
        for lang in (ngx.var.http_accept_language .. ","):gmatch("([^,]*),") do
            if string.sub(lang, 0, 2) == "en" then
                ngx.redirect("/en/index.html")
            end
            if string.sub(lang, 0, 2) == "nl" then
                ngx.redirect("/nl/index.html")
            end
            if string.sub(lang, 0, 2) == "de" then
                ngx.redirect("/de/index.html")
            end
        end
        ngx.redirect("/en/index.html")
    ';
}

Я хочу сопоставить только URL, который заканчивается на mysite.org Любая идея, как я могудобавить критерии?

результат может быть примерно таким:

if string.sub(lang, 0, 2) == "nl" and host == "mysite.org" then
                    ngx.redirect("/nl")
                end

1 Ответ

0 голосов
/ 29 мая 2019

Не имея полной информации о вашем точном вводе, я думаю, что сработает следующее:

location = / {
    rewrite_by_lua '
        for lang in (ngx.var.http_accept_language .. ","):gmatch("([^,]*),") do
          lang = lang:sub(1, 2)
          if host:match("mysite%.org$") then
            if lang == "en" then ngx.redirect("/en/index.html")
            elseif lang == "nl" then ngx.redirect("/nl/index.html")
            elseif lang == "de" then ngx.redirect("/de/index.html")
            end
          end
        end
        ngx.redirect("/en/index.html")
    ';
}

Также обратите внимание на использование elseif, чтобы сделать код короче.С другой стороны, явная проверка для языка 'en' может быть опущена, поскольку это случай сброса по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...