2011-10-21 9 views
3

私はまだCakePHPには新しく、アセットキャッシングを最適化する方法を理解するのに問題があります。CakePHPと.htaccessアセットキャッシング

戻る私はまだ純粋なPHPでコーディングされたときに、これは私が私の.htaccessとheader.inc.phpファイルとどうなるのかです:

.htaccessファイル:

<IfModule mod_rewrite.c> 
    # Turn the rewrite engine on 

    RewriteEngine On 

    # The following rewrite rule makes it so that if a URL such as 
    # http://example.com/css/style.1291314030.css is requested 
    # then it will actually load the following URL instead (if it exists): 
    # 
    # http://example.com/css/style.css 
    # 
    # This is to increase the efficiency of caching. See http://bit.ly/9ZMVL for 
    # more information. 

    RewriteCond %{DOCUMENT_ROOT}/$1/$2.$3 -f 
    RewriteRule ^(css|js)/(.*)\.[0-9]+\.(.*)$ /$1/$2.$3 [L] 
</IfModule> 

<IfModule mod_expires.c> 
    # Optimize caching - see http://yhoo.it/ahEkX9 for more information. 

    ExpiresActive On 

    ExpiresByType image/gif "access plus 1 month" 
    ExpiresByType image/png "access plus 1 month" 
    ExpiresByType image/jpg "access plus 1 month" 
    ExpiresByType image/jpeg "access plus 1 month" 
    ExpiresByType image/x-icon "access plus 1 month" 
    ExpiresByType text/css "access plus 1 year" 
    ExpiresByType application/javascript "access plus 1 year" 
    ExpiresByType application/x-javascript "access plus 1 year" 
</IfModule> 

header.inc.php :私は、クライアントのウェブサイト上で働いていたとき、私はハードリフレッシュを実行したり、キャッシュをクリアするためにクライアントに通知しなければならなかったことはありませんので、

foreach ($css_to_use as $current_css) 
{ 
    echo "\n\t\t<link rel=\"stylesheet\" type=\"text/css\" href=\"css/$current_css." . filemtime("{$_SERVER['DOCUMENT_ROOT']}/css/$current_css.css") . ".css\">"; 
} 

このセットアップは非常によく働きました。それは完全に自動であり、キャッシュのメリットがありました。

私はCakePHPの「アプリ/設定/ core.phpの」ファイルで、1のコード行を使用することができていることがわかり

Configure::write('Asset.timestamp', 'force'); 

しかし、唯一のURLは次のようになりますこと:

<link rel="stylesheet" type="text/css" href="/css/style.css?1291314030" /> 

私はそれが好きなように動作しません。アセットキャッシングを達成する最良の方法は何ですか?

ありがとうございます!

+0

クエリーストリングを追加するのはURLを変更するのと同じですが、ブラウザはそれを考慮してCSSをリロードします。私はいつもフラッシュコンテンツで同じことをしています。 – grapefrukt

+0

ええ、私は自分のテストをしているときに間違いを犯していて、実際にはうまくいきます。この質問を削除する必要がありますか? – Nick

+0

私は適切な回答を投稿し、将来の参考になるためにここに留まることができます。 – grapefrukt

答えて

4

クエリ文字列を追加すると、URLを変更するのと同じ効果が得られます。ブラウザは、CSSや画像など、さまざまな点を考慮してアセットをリロードします。

+0

ええ、私はテストをしているときに間違いを犯していて、実際にはうまくいきます。 – Nick

1

ステップ1:この

## EXPIRES CACHING ## 
<IfModule mod_expires.c> 
ExpiresActive On 
ExpiresByType image/jpg "access plus 1 year" 
ExpiresByType image/jpeg "access plus 1 year" 
ExpiresByType image/gif "access plus 1 year" 
ExpiresByType image/png "access plus 1 year" 
ExpiresByType text/css "access plus 1 month" 
ExpiresByType application/pdf "access plus 1 month" 
ExpiresByType text/x-javascript "access plus 1 month" 
ExpiresByType application/x-shockwave-flash "access plus 1 month" 
ExpiresByType image/x-icon "access plus 1 year" 
ExpiresDefault "access plus 2 days" 
</IfModule> 
## EXPIRES CACHING ## 

ステップ2にWebルートの.htacessを変更します。sudoサービスapache2の再起動

ステップ4:ビールを飲む、人生のsudo a2enmodが

ステップ3を満了しましたいいね。

+0

あなたは本当にビールに値する –