利用浏览器缓存在更新.htaccess后不起作用

时间:2016-08-31 作者:Ankita Kashyap

我在WordPress中有一个网站,我更新了我的.htaccess 使用以下规则存档。

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
</IfModule>
现在,当我用Google insight. 它仍然给我错误leverage browser caching

我用过这个代码

    add_filter( \'script_loader_src\', \'elated_child__remove_ver\' );
    add_filter( \'style_loader_src\', \'elated_child__remove_ver\' );

    function elated_child__remove_ver( $src ) { // Remove query strings from static resources
        if ( strpos( $src, \'?f=\' ) || strpos( $src, \'&f=\' ) ) {
            $src = remove_query_arg( \'f\', $src );
        }



   return $src;
}
有什么想法吗?

3 个回复
SO网友:Ethan O\'Sullivan

。。。这些文件包含?ver= 查询字符串。你能告诉我怎么去掉这个吗

删除所有?ver=&ver= 查询字符串在子主题的functions.php:

add_filter( \'script_loader_src\', \'wpse_237671_remove_ver\' );
add_filter( \'style_loader_src\', \'wpse_237671_remove_ver\' );

function wpse_237671_remove_ver( $src ) { // Remove query strings from static resources
    if ( strpos( $src, \'?ver=\' ) || strpos( $src, \'&ver=\' ) ) {
        $src = remove_query_arg( \'ver\', $src );
    }
    return $src;
}

之前

<link rel=\'stylesheet\' href=\'http://some.site/to/file.css?ver=4.6\' type=\'text/css\' />

之后

<link rel=\'stylesheet\' href=\'http://some.site/to/file.css\' type=\'text/css\' />
更新它看起来像Better WordPress Minify 正在生成?f= 查询字符串。我建议调查一下Autoptimize 作为替代方案,因为此选项更为最新且不会生成?f=

SO网友:bynicolas

这应该可以

if ( !is_admin() || !is_admin_bar_showing() ){
  add_filter( \'script_loader_src\', \'_remove_script_version\', 15, 1 );
  add_filter( \'style_loader_src\', \'_remove_script_version\', 15, 1 );
}

function _remove_script_version( $src ){
  if (preg_match("(\\?ver=)", $src )){
    $parts = explode( \'?\', $src );
    return $parts[0];
  }else{
    return $src;
  }
}
这将删除?ver= 从文件url。有一个条件检查,看看我们是否在管理页面上或是否登录。在这种情况下,我们不应用过滤器(当您在站点上工作时,可能是有用的信息)。

还要注意的是,这不会删除所有查询字符串,因为一些插件/主题可能会添加自己的,并且会在其代码库中使用其他过滤器或硬编码。但是,如果提供了过滤器,您可以将相同的功能挂接到这些过滤器上(如果没有,则需要手动编辑这些文件)

例如,您可以添加add_filter( \'genesis-header\', \'_remove_script_version\', 15, 1); 如果您使用的是genesis主题,请访问该过滤器列表。

SO网友:Nathan Powell

如果您看到ver= 每次加载页面时查看页面上的源时,参数都会更改,加载的文件是“缓存破坏”。完成“缓存破坏”后,浏览器可以确定是否正在使用其通常缓存的文件的更新版本。

在WordPress中,用于站点的CSS和Javascript文件应使用wp_enqueue_script 作用这可以被主题和插件覆盖甚至删除。在此上下文中,关于此函数需要注意的重要部分是第四个参数:$ver. 如果该参数设置为动态更改,或者更常见的是由于文件已更改而更改其值,则该参数将“破坏”缓存,导致浏览器重新获取该名称的文件。

这方面的一个例子是对主题的更新。如果我在主题JavaScript文件中更改一个函数,我会更改它的$verwp_enqueue_script 功能也很强大,因为我不希望有人仅仅因为浏览器的缓存中仍有文件,就更新主题而看不到更改。我不需要更改它的名称,浏览器就可以知道要查找什么。浏览器也不必在每次需要时都查找新文件。

相关推荐

将重写规则直接添加到.htaccess文件

我想添加一个简单的重写规则RewriteRule ^apply\\/? https://docs.google.com/forms/d/e/1FAIpQLSf5IrOhg0E_NAGZnOvMuaXhU80sio8bukaWVBkb87eEOa9kTw/viewform [L] 我的。htaccess文件如下# BEGIN WordPress # The directives (lines) between "BEGIN WordPress" and "EN