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;
}
Если удалить строку en;
по умолчанию из карты
, значение $ lang
станет пустая строка, которая оценивается как ложь в выражении if
. См. этот документ для получения подробной информации.
Вы можете заменить оператор rewrite ^ / $ ...
блоком location = /
. См. этот документ для получения подробной информации.
Например:
map $http_accept_language $lang {
~ja ja;
}
server {
...
location = / {
if ($lang) {
return 301 /$lang/$is_args$args;
}
}
...
}
См. этот документ о том, какие операторы разрешены в блоке if
, вложенном в блок location
.