Назад | Перейти на главную страницу

Перенаправление языка Nginx + Wordpress

В настоящее время я пытаюсь настроить установку Nginx с использованием многосайта Wordpress, используемого для языковой поддержки.

Настроен мультисайт: mysite.com (не используется) mysite.com/it mysite.com/en

В основном я хочу добавить язык по умолчанию и перенаправить, если найду английский. На самом деле сайт находится на установке Apache, поэтому мы используем:

RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ /en/ [L,R=301]

RewriteRule ^$ /it/ [L,R=301]

для фактического перенаправления.

Я пытаюсь воспроизвести это с помощью nginx, безуспешно. Пока я добавил:

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

server {

 listen       80;
 server_name  mysite.com;
 access_log  /var/log/nginx/logs/mysite-access.log ;
 error_log /var/log/nginx/logs/mysite-error.log ;

 location / {
    root   /var/www/html/mysite;
    index  index.php index.html;
    try_files $uri $uri/ /index.php?$args;
    rewrite ^ /$lang/ permanent;
 }    

#Other rules used by wordpress and plugins
}

Это приводит к ошибке «Страница не перенаправляет правильно».

Есть какие-нибудь советы, как решить проблему?

Спасибо.

Вот проблема:

    rewrite ^ /$lang/ permanent;

Вы переписываете каждый запрос, а не просто запросы к домашней странице, потому что каждый запрос имеет начало.

Есть (как минимум) два способа исправить это. Вы можете использовать:

  1. Переписывать только запросы для домашней страницы.

    rewrite ^/$ /$lang/ permanent;
    
  2. Используйте конкретный location что соответствует только домашней странице:

    location = / {
        return 301 /$lang/;
    }