@fanch_sw

Как исправить 404 при перезагрузке на мобильном (nginx/vue)?

Столкнулся со странной ситуацией, попросили развернуть старый проект.
Как оказалось, конфига в репозитории нет, собирал свой и вот к чему пришел.

Сам сайт сделан на CMS, но у него есть "подпроект" на vue, вернее два, отдельно мобильная и десктопная версия "подпроекта".

Подпроект доступен по
/constructor,
в nginx добавил location, который в зависимости от агента устанавливает тот или иной алиас и вроде все работало, пока клиент не обратил внимание, что на мобильном, находясь не в корне подпроекта
/constructor
, а дальше, например в
/constructor/auth
- если обновить страницу - то nginx выдает 404 ошибку. При этом на десктопе все работает.

Подскажите как пофиксить, может кто сталкивался.

Конфиг:
set $platform desktop;

        if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle$
                set $platform mobile;
        }

        if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|g$
                set $platform mobile;
        }

        location ^~ /constructor {
                set $front_path /home/www/redesigned_spa_desktop/dist;

                if ($platform = mobile) {
                        set $front_path /home/www/redesigned_spa/dist;
                }

                alias $front_path;
                index index.html;

                try_files $uri /constructor/index.html;
        }

        location / {
                root /home/www;
                if (!-e $request_filename) {
                        rewrite ^/(.*)$ /index.php?q=$1 last;
                }
        }
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
@dodo512
Проблема тут:
location ^~ /constructor {

        if (...) {

        }

        try_files ...;
}

if и try_files плохо сочетаются друг с другом "If is Evil… when used in location context".

Вместо if нужно использовать map.
map $platform $front_path {
    default   /home/www/redesigned_spa_desktop/dist;
    mobile    /home/www/redesigned_spa/dist;
}

server {

        location ^~ /constructor {

                alias $front_path;

                try_files $uri /constructor/index.html;
        }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы