5

ちょっと、そこ!

/staticApache 2.x サーバーの webroot にフォルダーがあります。リクエストが一致した場合

/static/<somename like [\S-_]+>.(png|jpg|css|js)/\d{8,15}

例えば

/static/bg.jpg/1335455634

私は2つのことをしたい:

  • URLはに書き換えられます/static/bg.jpg(タイムスタンプを取り除きます)
  • それは無期限になります ('expires 2030, max-age=290304000, public cache, ...)

リクエストが一致しない場合、リクエストとそのヘッダーは通常どおりであり、書き換えは行われません。理想的には、/static/* 以外のリクエストは影響を受けるべきではありません (ただし、«偶然の末尾のタイムスタンプ» はまれである必要があります...)

私は FilesMatch / RewriteCond に問題があるだけなので、悪い試みを投稿するのではなく... (私のマシンでは一般的に書き換えが有効になっており、キャッシュ関連のヘッダーを送信する権利を持っています)

ダンケシェーン!

4

2 に答える 2

4
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^static/([^.]+\.(png|jpe?g|css|js))/\d{8,15}$ static/$1 [L,R,NC]

# now set expire date to today + 1 year
<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresByType image/jpeg "access plus 1 years"
    ExpiresByType image/png "access plus 1 years" 
    ExpiresByType text/css "access plus 1 years"
    ExpiresByType text/js "access plus 1 years"
    ExpiresByType text/javascript "access plus 1 years"
    ExpiresByType application/javascript "access plus 1 years"
    ExpiresByType application/x-javascript "access plus 1 years" 
</IfModule>

Web でこれを見つけたので、無期限を選択iccess plus 1 yearsしました。

「応答を「無期限」としてマークするために、オリジンサーバーは、応答が送信されてから約1年後に有効期限を送信します。HTTP / 1.1サーバーは、1年以上先の有効期限を送信しないでください。」

HTTP 1.1 RFC から

于 2012-05-04T20:08:53.330 に答える
2

このようなものはどうですか?

RewriteEngine on
RewriteRule ^static/([^/]+\.(png|jpg|css|js))x?/\d{8,15}$ /static/$1 [NC,L]

<FilesMatch "\.(png|jpg|css|js)$">
    <IfModule mod_expires.c>
        ExpiresActive On
    </IfModule>
    <IfModule mod_headers.c>
        ExpiresDefault "access plus 10 years"
    </IfModule>
</FilesMatch>
于 2012-05-02T17:16:56.600 に答える