web-dev-qa-db-ja.com

Mod_Rewriteによって作成された301ページにキャッシュヘッダーを追加しようとしています

Mod-Rewriteを使用して他のURLにリダイレクトされるいくつかのURLがWebサイトにあります。例えば:

RewriteRule ^section$ /newsection [NC,L,R=301]

上記のルールは http://example.com/sectionhttp://example.com/newsection にリダイレクトします(ここではexample.comを使用しています。 tは私の質問とは無関係なので、実際のURLを使用したい)

次に、webpagetest.orgでwebpagetestオプティマイザーを使用してページをテストし、次のようにリダイレクトページを受信し、エラーに進みました。

Leverage browser caching of static assets: ##/100

FAILED - (No max-age or expires) - http://example.com/section

そこで、CURLコマンドラインツールを使用して同じページにアクセスすると、結果は次のようになります。

体:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://example.com/newsection">here</a>.</p>
</body></html>

そしてヘッダー:

HTTP/1.1 301 Moved Permanently
Date: Sun, 08 Mar 2015 18:09:18 GMT
Server: Apache
Location: http://example.com/newsection
Content-Type: text/html; charset=iso-8859-1

ユーザーがリダイレクトページをロードするためだけにネットワークにアクセスする必要がないように、301または302ステータスコードを返すページにのみ、キャッシュコントロールまたは失効ヘッダーを将来の日付で追加できる方法はありますか?

3
Mike

RewriteRuleディレクティブで環境変数を設定し、この環境変数の存在に基づいてCache-Controlヘッダーを条件付きで設定できます...

RewriteRule ^section$ /newsection [NC,L,R=302,E=cachesection:1]
Header always set Cache-Control "max-age=86400" env=cachesection

...「一時的な」リダイレクトを1日間キャッシュします。

1
MrWhite