升级后未加载静态内容


25

从Magento 2.1.0升级到Magento 2.1.3(使用作曲家)后,静态内容不再加载。在浏览器控制台中,我可以看到所有文件都不可用(404):

文件不可用预览

我在目录中看不到名称相同version*pub目录。

我已经做了,但没有帮助:

  1. 将所有权限设置为777,但没有成功。
  2. 清理缓存
  3. 删除了 pub/static/*
  4. 几次重新生成静态内容
  5. 替换.htaccess文件(在pub/static目录中)从官方仓库中的文件。

另一个信息:

  • mod_rewrite 已启用
  • FollowSymLinks允许(在默认主机配置和本地.htaccess
  • 在更新到2.1.3之前,此配置在Magento 2.1.0中运行良好。
  • pub/static 可写

有什么建议么?


您是否重新部署了静态内容?
Eamonn

是的,我做了很多次都没有成功
Siarhey Uchukhlebau

我遇到了同样的问题,被否决了。就我而言,我正在使用Nginx和相同的conf文件。更新是使用作曲家完成的,并且执行与@SiarheyUchukhlebau相同的步骤
Kevin Chavez

噢亲爱的。突然遇到了同样的问题,但是使用了Apache。清除pub / static会将其关闭,我似乎无法修复。
伊蒙(Eamonn)

可能在下面找到了解决方案。
伊蒙(Eamonn)

Answers:


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...

它无法正常工作,无法重定向到所需的文件。

无基础重写:

重写不起作用

用base重写:

改写作品

这是我.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')
Dhaduk Mitesh

在apache2系统上,您需要使用以下命令启用mod_rewrite:- sudo a2enmod rewrite
达拉斯·克拉克

8

如果您正在运行Nginx,请使用此修复程序。您可能拥有自己的conf文件,您需要使用它来更新/ static /部分,它们专门更新了其中的一部分:#删除用于克服浏览器缓存部分的静态文件的签名:

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]
Kevin Chavez

感谢您的答复,它为我指出了该问题的正确解决方案。我使用Apache,解决方案有所不同,但无论如何我还是要感谢您。
Siarhey Uchukhlebau,2016年

您的生活更安全!我正撞在墙上的亩头!可以确认它适用于我的
Nginx

6

转到数据库,然后在core_config_data表中插入一行:

INSERT INTO core_config_data (scope, scope_id, path, value) VALUES ('default', 0, 'dev/static/sign', '0');

太棒了!! 谢谢。
l00k

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了它:.htaac​​ess中也启用了
Siarhey Uchukhlebau

确保FollowSymLinks允许。在从github安装最新版本后,这发生在我身上,而mod_rewrite和FollowSymLinks出现了问题。
马吕斯

在重写部分FollowSymLinks中,设置为Options +FollowSymLinks并且在更新之前,相同的配置没有问题:(
Siarhey Uchukhlebau

4

似乎2.1.3版本假定的默认值 Stores => Configuration => Developer => Static Files Settings => Sign Static Files设置为是。

因此,无需更改重写,可以将此功能设置为“否”。

如果无法通过管理员执行此操作,因为管理员无法加载前端资产,请在core_config_data表中更改/添加此设置:

作用域:默认
scope_id:0
路径:dev / static / sign
值:0

在Github上也注意到了这个问题:https : //github.com/magento/magento2/issues/7869


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.