Статическое содержимое не загружается после обновления

25

После обновления с Magento 2.1.0 до Magento 2.1.3 (с использованием composer) статический контент больше не загружается. В консоли браузера я вижу, что все файлы недоступны (404):

файлы недоступны предварительный просмотр

Я не вижу каталогов с именем version*в pubкаталоге.

Что я уже сделал, но это не помогло:

  1. установить все разрешения 777, но безуспешно.
  2. почистил кеш
  3. удалил pub/static/*
  4. регенерированный статический контент несколько раз
  5. заменил .htaccessфайл (в pub/staticкаталоге) на файл из официального репозитория.

Другая информация:

  • mod_rewrite включен
  • FollowSymLinksразрешено (в конфигурации хоста по умолчанию и локально .htaccess)
  • Эта конфигурация работала нормально с Magento 2.1.0 до обновления до 2.1.3
  • pub/static доступно для записи

Какие-либо предложения?

Сергей Учухлебау
источник
Вы повторно развернули статический контент?
Имонн
Да, я делал это много раз, но безуспешно
Сергей Учухлебау
У меня та же проблема, проголосовал. В моем случае я использую Nginx и те же файлы conf. Обновление было выполнено с использованием composer и выполняло те же действия, что и @SiarheyUchukhlebau
Кевин Чавес,
О, Боже. Внезапно возникла та же проблема, но с использованием Apache. Очистка pub / static отключила это, и я не могу исправить это.
Eamonn
Возможно, нашли решение ниже.
Имонн

Ответы:

28

Основная проблема была вызвана некорректной работой переписывания (как сказал @Marius). В RewriteBase моем каталоге их не было, pub/static/и Apache не смог найти файлы, потому что искал их в корневой папке. После того, как мы добавили:RewriteBase /pub/static все начинает работать.

Как это работает:

по этому адресу:

Http: //m2.uchuhlebov.web.ra/pub/static/version1481885888/frontend/Magento/luma/en_US/mage/requirejs/mixins.js

перезапись должна работать:

RewriteRule ^version.+?/(.+)$ $1 [L]

как строка началась с корневой папки:

/pub/static/version...

он не работал и не мог перенаправить в файл, нужно.

Переписать без базы:

переписать не работает

Перепишите с базой:

переписать работы

Вот часть моего .htaccessфайла из pub/static(переписывает):

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteBase /pub/static
    # Remove signature of the static files that is used to overcome the browser cache
    RewriteRule ^version.+?/(.+)$ $1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l

    RewriteRule .* ../static.php?resource=$0 [L]
</IfModule>

Как отключить управление версиями статических файлов:

Если вы не хотите использовать статическое управление версиями файлов, вы можете отключить эту функцию в административной области Magento:

конфиг

Можно изменить этот параметр для области по умолчанию, используя следующий запрос MySQL :

INSERT INTO `core_config_data`(`path`, `value`) VALUES ('dev/static/sign', 0) ON DUPLICATE KEY UPDATE `value`=0

Затем выполните следующую команду, чтобы очистить кеш конфигурации:

bin/magento cache:clean config

PS: Мой ответ актуален для пользователей apache2. Если вы используете NGINX, посмотрите этот ответ (автор @ kevin-javitz)

Сергей Учухлебау
источник
если dev/static/signсуществует, вставьте его. INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', 0, 'dev/static/sign', '0')
Дхадук Митеш
В системах apache2 вам нужно включить mod_rewrite с помощью: - sudo a2enmod rewrite.
Даллас Кларк
8

Если вы используете Nginx, вот исправление. Вероятно, у вас есть собственный файл conf, вам нужно обновить / static / part этим, они специально обновили его часть: # Удалите подпись статических файлов, которая используется для преодоления раздела кэша браузера:

location /static/ {
    # Uncomment the following line in production mode
    # expires max;

    # Remove signature of the static files that is used to overcome the browser cache
    location ~ ^/static/version {
        rewrite ^/static/(version\d*/)?(.*)$ /static/$2 last;
    }

    location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ {
        add_header Cache-Control "public";
        add_header X-Frame-Options "SAMEORIGIN";
        expires +1y;

        if (!-f $request_filename) {
            rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
        }
    }
    location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
        add_header Cache-Control "no-store";
        add_header X-Frame-Options "SAMEORIGIN";
        expires    off;

        if (!-f $request_filename) {
           rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
        }
    }
    if (!-f $request_filename) {
        rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
    }
    add_header X-Frame-Options "SAMEORIGIN";
}
Кевин Чавес
источник
Дополнительное примечание: если вы используете apache, убедитесь, что это есть в строке pub / static / .htaccess 16:RewriteRule ^version.+?/(.+)$ $1 [L]
Кевин Чавес,
Спасибо за ваш ответ, он указал мне на правильное решение вопроса. Я использую Apache и решение другое, но я все равно благодарен вам.
Сергей Учухлебау
Вы безопаснее! Я стучал головой об стену! Может подтвердить, что это работает для моего nginx Magento 2.1.3
Cudos
6

Перейдите в базу данных и вставьте строку в таблицу core_config_data:

INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', 0, 'dev/static/sign', '0');
Сафал Джа
источник
Потрясающе!! Спасибо.
100
4

Там не должно быть version*папка в staticпапке.
Скорее всего, это происходит потому, что у вас не включен mod_rewrite в вашем экземпляре.
Путь pub/static/version1234/some/asset.jsдолжен быть переписан на pub/static/some/asset.js. Версия существует только для истечения срока действия кэша браузера.

Мариус
источник
Я проверяю mod_rewrite и он включен: [root@web www]# httpd -M | grep "rewrite" rewrite_module (shared) Syntax OKв .htaacess он тоже включен
Сергей Учухлебау
убедитесь, что FollowSymLinksэто разрешено. Это случилось со мной после установки последней версии с github, и у меня возникла проблема с mod_rewrite и FollowSymLinks.
Мариус
В разделе перезаписи FollowSymLinksустановлено как Options +FollowSymLinksи не было проблем с такой же конфигурацией до обновления :(
Сергей Учухлебау
4

Похоже, что релиз 2.1.3 предполагает значение по умолчанию для Stores => Configuration => Developer => Static Files Settings => Sign Static Files установлено в Да.

Таким образом, вместо изменения перезаписей можно установить для этой функции значение Нет.

Если это невозможно сделать от администратора, поскольку администратор не может загрузить ресурсы внешнего интерфейса, измените / добавьте этот параметр в core_config_dataтаблицу:

scope: по умолчанию
scope_id: 0
путь: dev / static / sign
value: 0

Эта проблема также отмечена на Github: https://github.com/magento/magento2/issues/7869

nbjohan
источник
2

Если вы используете Apache. Вы не должны удалять .htaccess из pub / static. Вы можете получить замену здесь.

Имон
источник
Спасибо. Я уже заменил этот файл, но проблема была в неправильной RewriteBase.
Сергей Учухлебау