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

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

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

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

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

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

Правило, которое я использовал:

map $http_accept_language $lang {
    default en;
    ~ja ja;
}

...

rewrite ^/$ /$lang/ permanent;

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

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

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

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

map $http_accept_language $lang {
default en;
~ja ja;
}

server 
{ 
listen 80; 
listen 443 ssl http2; 
server_name mydomain.com www.mydomain.com; 
index index.php index.html index.htm default.php default.htm default.html; 
root /www/wwwroot/mydomain.com;

#REWRITE-START

rewrite ^/$ /$lang/ permanent;

include /www/server/panel/vhost/rewrite/mydomain.com.conf;
#REWRITE-END


location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
    return 404;
}


location ~ \.well-known{
    allow all;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
    expires      30d;
    error_log /dev/null;
    access_log /dev/null;
}

location ~ .*\.(js|css)?$
{
    expires      12h;
    error_log /dev/null;
    access_log /dev/null; 
}
access_log  /www/wwwlogs/mydomain.com.log;
error_log  /www/wwwlogs/mydomain.com.log;
}
1
задан 7 July 2021 в 22:44
1 ответ

Если удалить строку en; по умолчанию из карты , значение $ lang станет пустая строка, которая оценивается как ложь в выражении if . См. этот документ для получения подробной информации.

Вы можете заменить оператор rewrite ^ / $ ... блоком location = / . См. этот документ для получения подробной информации.

Например:

map $http_accept_language $lang {
    ~ja ja;
}

server {
    ...
    location = / {
        if ($lang) {
            return 301 /$lang/$is_args$args;
        }
    }
    ...
}

См. этот документ о том, какие операторы разрешены в блоке if , вложенном в блок location .

0
ответ дан 28 July 2021 в 13:22

Теги

Похожие вопросы