.htaccess - mod_expires

ExpiresActive ディレクトリ

ExpiresActive ディレクトリは、Expires ヘッダの生成の有効・無効を制御します。以下は 本ディレクティブの構文となります。

# ExpiresActive ディレクティブの構文
ExpiresActive On|Off
ExpiresActive ディレクティブの構文

本ディレクティブを有効にした場合、Expires ヘッダが有効になります。有効の場合、後述する ExpiresByType ディレクティブと ExpiresDefault ディレクティブ の設定に従いヘッダを追加します

以下は、png ファイルに対してキャッシュが破棄されるまで 1 週間の期限を設けた設定例と、レスポンス例です。期限切れ (expired) の日時が 1 週間後になっていることが分かります。Cache-Control の 604800 は秒単位となります。(60 × 60 × 24 × 7 = 604800)

# ExpiresActive ディレクティブの設定例
ExpiresActive On
ExpiresByType image/png "access plus 1 weeks"
ExpiresActive ディレクティブの設定例
# png ファイルに 1 週間のキャッシュ期限を設定した例
% curl -I https://murashun.jp/img/logo.png
HTTP/1.1 200 OK
Date: Thu, 03 Sep 2015 00:00:00 GMT
Cache-Control: max-age=604800
Expires: Thu, 10 Sep 2015 00:00:00 GMT
png ファイルに 1 週間のキャッシュ期限を設定した例

本ディレクティブは Expires と Cache-Control ヘッダの存在を保証するわけではないことに注意してください。条件が満たされていない場合はヘッダは追加されず、結果としてこのディレクティブが指定されていないように振る舞います。

ExpiresByType ディレクトリ

ExpiresByType ディレクトリは、指定された MIME タイプ(Content-Type) のドキュメント (例えば text/html) に対して生成される Expires ヘッダと Cache-Control ヘッダの max-age の値を定義します。以下は 本ディレクティブの構文となります。

# ExpiresByType ディレクティブの構文
ExpiresByType MIME-type <code>seconds
ExpiresByType ディレクティブの構文

seconds には、期限切れの日時を秒数で設定します。Cache-Control: max-age は期限切れの日時からリクエスト日時を引いたものを秒で表すことで生成されます。

期限切れの基準となる日時は、ファイルの最終更新日時か、ドキュメントへのアクセス日時です。どちらを使うかは <code> によって指定します。<code> には、MA を指定できます。M はファイルの最終更新日時、A はドキュメントへのアクセス日時になります。

# ExpiresActive ディレクティブを有効にする
ExpiresActive On

# gif 画像はアクセス日時から 1 ヶ月間有効にする
ExpiresByType image/gif A2592000

# HTML ドキュメントは最終更新日時から 1 週間有効にする
ExpiresByType text/html M604800
ExpiresByType ディレクティブの設定例

本ディレクティブは ExpiresActive On が指定されているときのみ有効であることに注意してください。これは、指定された MIME タイプ(Content-Type) に対してのみ ExpiresDefault ディレクティブで 設定された期限切れ期日を上書きします。

また、本ディレクティブと、ExpiresDefault ディレクティブは、"代替期間指定構文" と呼ばれる可読性に優れた構文を使用できます。以下が、代替期間指定構文です。

# ExpiresDefault ディレクティブの代替期間指定構文
ExpiresDefault "<base> [plus] {<num> <type>}*"

# ExpiresByType ディレクティブの代替期間指定構文
ExpiresByType type/encoding "<base> [plus] {<num> <type>}*"
ExpiresDefault ディレクティブとExpiresByType ディレクティブの代替期間指定構文

<base> は以下のいずれかになります。

  • access
  • now ('access' と等価)
  • modification

plus キーワードは省略可能です。<num> は整数値、<type> は以下のいずれかになります。

  • years
  • months
  • weeks
  • days
  • hours
  • minutes
  • seconds

例えば、以下の設定例では、どのドキュメントもアクセスの 1 ヶ月後に期限が切れます。

# 1 ヶ月後に期限が切れる設定例
ExpiresDefault "access plus 1 month"
ExpiresDefault "access plus 4 weeks"
ExpiresDefault "access plus 30 days"
1 ヶ月後に期限が切れる設定例

期限切れ時刻はいくつか <num><type> を追加することでより細かく制御できます。

# <num> や <type> を使用した設定例
ExpiresByType text/html "access plus 1 month 15 days 2 hours"
ExpiresByType image/gif "modification plus 5 hours 3 minutes"
<num> や <type> を使用した設定例

ExpiresDefault ディレクトリ

ExpiresDefault ディレクトリは、デフォルトの期限切れ期日の計算アルゴリズムを設定します。ExpiresByType ディレクティブによって タイプ毎に上書きできます。本ディレクティブでも、ExpiresByType ディレクティブと同じように "代替期間指定構文" が使用できます。詳細は、ExpiresByType ディレクティブを参照して下さい。以下は 本ディレクティブの構文となります。

# ExpiresDefault ディレクティブの構文
ExpiresDefault MIME-type <code>seconds
ExpiresDefault ディレクティブの構文

関連記事