Рейтинг:1

Неверное перенаправление языка Nginx + Wordpress с языком по умолчанию

флаг us

Неверное перенаправление языка Nginx + Wordpress с языком по умолчанию

Извините за дублирование вопросов здесь: Перенаправление языка Nginx + Wordpress

Все работает, но для языка EN по умолчанию.

Я просто хочу перенаправить посетителей JP в каталог /ja/, а позже, возможно, и другие страны в другие каталоги.

На данный момент я хочу, чтобы все остальные страны были в корневом домене.

Я использовал правило:

карта $http_accept_language $lang {
    по умолчанию en;
    ~ джа джа;
}

...

переписать ^/$ /$lang/ навсегда;

Это правило перенаправляло всех остальных посетителей на mydomain.com/ru/, это, конечно же, 404, так как мой основной язык - EN!

=======================================

Это все правила в конфиге на стороне сайта

Надеюсь, кто-нибудь может помочь мне с этим!

карта $http_accept_language $lang {
по умолчанию en;
~ джа джа;
}

сервер 
{ 
слушать 80; 
слушать 443 ssl http2; 
имя_сервера mydomain.com www.mydomain.com; 
индекс index.php index.html index.htm default.php default.htm default.html; 
корень /www/wwwroot/mydomain.com;

#ПЕРЕЗАПИСАТЬ-СТАРТ

переписать ^/$ /$lang/ навсегда;

включить /www/server/panel/vhost/rewrite/mydomain.com.conf;
#ПЕРЕЗАПИСАТЬ-КОНЕЦ


расположение ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|ЛИЦЕНЗИЯ|README.md)
{
    вернуть 404;
}


расположение ~ \.хорошо известно{
    позволять все;
}

расположение ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    истекает 30 дней;
    журнал_ошибок /dev/null;
    журнал_доступа /dev/null;
}

местоположение ~ .*\.(js|css)?$
{
    истекает через 12 часов;
    журнал_ошибок /dev/null;
    журнал_доступа /dev/null; 
}
журнал_доступа /www/wwwlogs/mydomain.com.log;
журнал_ошибок /www/wwwlogs/mydomain.com.log;
}
Richard Smith avatar
флаг jp
У вас есть `default en;` на вашей карте - вы говорите, что не хотите, чтобы по умолчанию перенаправлялось на `/en/`?
Matthew avatar
флаг us
да, @Richard Smithï¼ просто хочу перенаправить переведенный язык в свои каталоги, а все остальные — в root: mydomian.com
Matthew avatar
флаг us
Привет @Richard Smith ï¼ спасибо за ваш ответ, но извините, так как я не знаю, как программировать, поэтому не могли бы вы помочь мне с `if ($lang) { ... }`
Matthew avatar
флаг us
Я просто размещаю весь свой боковой файл конфигурации ниже, пожалуйста, помогите мне проверить его.
Matthew avatar
флаг us
извините за ошибку, просто удалил ответ и отредактировал вопрос!
флаг sv
Добро пожаловать в ServerFault.Ваш оператор перезаписи может быть записан так: `if ( $lang != "en" ) { rewrite ^/$ /$lang/permanent; }` для достижения желаемого эффекта.
Рейтинг:0
флаг jp

Если вы удалите по умолчанию en; линия от вашего карта, значение $ланг станет пустой строкой, которая оценивается как ложная в если выражение. Видеть этот документ для деталей.

Вы можете заменить переписать ^/$ ... заявление с местоположение = / блокировать. Видеть этот документ для деталей.

Например:

карта $http_accept_language $lang {
    ~ джа джа;
}

сервер {
    ...
    местоположение = / {
        если ($ланг) {
            вернуть 301 /$lang/$is_args$args;
        }
    }
    ...
}

Видеть этот документ о каких утверждениях разрешено в если блок, вложенный в место расположения блокировать.

Matthew avatar
флаг us
Это работает, но возникает другая проблема: для другого языка он перенаправляется на mydomain.com// , в конце есть 2 "//"

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.