Magic_Moment
@Magic_Moment

Как исправить 404 ошибку для двуязычного сайта в NGINX?

Здравствуйте.
При переносе сайта (движок MODx) с Apache на NGINX столкнулся с тем, что URL для английской версии сайта отдают 404 ошибку в то время, как для русской все работает.

URL для русской версии имеют вид https://site.com/page/ (код ответа сервера 200)
URL для английской версии имеют вид https://site.com/en/page/ (код ответа сервера 400)
Как настроить формирование URL для английской версии в конфигах виртхоста NGINX?

Конфиг виртхоста
server {
        listen 80;
        server_name example.com www.example.com;
        root /home/sites/example.com;
        index index.php;
        client_max_body_size 30M;
        location / {
                root /home/sites/example.com;
                if (!-e $request_filename) {
                        rewrite ^/(.*)$ /index.php?q=$1 last;
                }
        }
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                fastcgi_pass  unix:/run/php/php7.2-fpm.sock
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_ignore_client_abort on;
                fastcgi_param  SERVER_NAME $http_host;
        }

        location ~ /\.ht {
                deny  all;
        }
}

Частично удалось решить проблему с помощью кода

location ~* ^/(ru|en) {
rewrite ^/(ru|en)?/?(.*)$ /index.php?cultureKey=$1&q=$2 last;
}
Пропала 404 ошибка, но теперь все стили для второй языковой версии хотят загружаться через /en/style.css, а их в той папке нет и не было никогда :(

Если кто знает как помочь - буду благодарен.
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
@mezhuev
Системный администратор
location / {
    rewrite ^/(en|ru)/?(.*)$ /index.php?cultureKey=$1&q=/$2 last;
    try_files $uri /index.php?q=$request_uri;
}

Если наличие index.php подразумевается не только в корне, но и во вложенных каталогах, замените $uri на $uri $uri/.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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