Как добавить код языка после имени домена на nginx

Я хотел бы добавить код языка en-us в URL. Ожидание следующее.

Когда пользователь нажимает на http://example.com/, страница должна перенаправлять пользователей на http://example.com/en-us/ Примечание. Я достиг этого с помощью следующего кода.

location = / {
      rewrite ^ /en-us/ redirect;
  }

Как перенаправить клиентов на следующие сценарии

Просто то, чего я хочу добиться, это если в URL-адресе нет en-us, тогда мы должны добавить en-us в место XX-XX. http://example.com/XX-XX/contact


person Karthi Skb    schedule 30.04.2018    source источник


Ответы (2)


# Do nothing for assets (paths with a dot)

location ~ \. {
}

Вы можете сопоставить местоположения, которые не начинаются с требуемого пути, используя отрицательное регулярное выражение (?!)

# Paths that don't start  with /en-us/ are redirected:

location ~ ^(?!/en-(us|in)/) {
    rewrite ^/(.*)$ /en-us/$1 redirect;
}

Или используя блок if:

if ($request_uri !~ "^/en-(us|in)/")
{
    return 301 /en-us/$request_uri;
}
person jspcal    schedule 30.04.2018
comment
Привет, спасибо за ваш ответ, и он работает хорошо. Я добавил еще 1 сценарий (3-й пункт). Можно ли ограничить добавление URL? - person Karthi Skb; 30.04.2018
comment
Да, также включите регулярные выражения. - person jspcal; 30.04.2018
comment
Спасибо, это работает, как ожидалось. Но возникает еще одна проблема: я не хочу добавлять код этого языка в URL-адреса js и css. В результате страница отображается неправильно. Я хочу, чтобы это перенаправление работало только для URL-адресов веб-сайтов, а не для статических файлов. Будет здорово, если у нас будет такая возможность. - person Karthi Skb; 30.04.2018
comment
Вы можете сопоставлять статические активы и иметь пустой блок - person jspcal; 30.04.2018

Вы читали документацию по переписыванию? Там много подобных примеров.

Это я бы сделал так (непроверено).

# Do not redirect /
location = / {
}

# Redirect everything else to /en-us/...
location / {
    rewrite ^/(.*)$ /en-us/$1 redirect;
}
person ntd    schedule 30.04.2018