web-dev-qa-db-ja.com

.htaccessを更新した後にブラウザキャッシュが機能しない

私は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 でチェックしたところ、それでもまだブラウザのキャッシュを利用するのためのエラーを出しています

私はこのコードを使いました

    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;
}

何か案が?

2
Ankita Kashyap

... ?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' />

更新

より良いWordPress Minify?f=クエリ文字列を生成しているようです。 Autoptimize を見直すことをお勧めします。これは最新のもので、?f=を生成しないからです。

これはそれをするべきです

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;
  }
}

これにより、ファイルのURLから?ver=が削除されます。管理ページにいるのか、ログインしているのかを確認するための条件付きチェックがあります。その場合は、フィルタを適用しません(あなたがあなたのサイトで作業するときに役立つ情報かもしれません)。

また、これは _ all _ query文字列を削除しないことに注意してください。プラグインやテーマによっては独自のものを追加したり、他のフィルタを使用したり、コードベース内でハードコードしたりする場合があります。ただし、それらが提供されている場合は、同じ機能をそれらのフィルタにフックすることができます(提供されていない場合は、これらのファイルを手動で編集する必要があります)。

たとえば、ジェネシステーマを使用している場合は、そのフィルタリストにadd_filter( 'genesis-header', '_remove_script_version', 15, 1);を追加できます。

1
bynicolas

ページをロードするたびにページ上のソースを表示しているときにver=パラメータが変更された場合、ロードされるファイルは「キャッシュ破壊」です。 「キャッシュ破壊」は、通常キャッシュするファイルの新しいバージョンが使用されているかどうかをブラウザが判断できるようにするために行われます。

WordPressでは、サイトに使用されるCSSとJavascriptファイルは wp_enqueue_script 関数を使用するべきです。これはテーマやプラグインによって上書きされたり削除されたりすることさえあります。この文脈でこの関数について注意すべき重要な部分は、4番目のパラメーター、$verです。そのパラメータが動的に変更されるように設定されている場合、またはより一般的にはファイルが変更されたためにその値を変更することによって、パラメータはキャッシュを破壊し、ブラウザにその名前のファイルを新たに取得させます。

この例としては、テーマの更新があります。テーマのJavaScriptファイル内の関数を変更した場合は、$ver関数内のwp_enqueue_scriptも変更します。これは、ブラウザがまだファイルをキャッシュに保持しているからといって、誰かにテーマを更新させたくないからです。何を見つけるべきかを知るためにブラウザの名前を変更する必要はないはずです。ブラウザは、必要になるたびに新しいファイルを探す必要もありません。

1
Nathan Powell