ページ本文へ移動
炭火ブログ

MENU

ねこ ねこ

Cloudflareと.htaccessで構築する静的サイトのキャッシュ設定

WordPressで作成したブログを静的サイトとして公開しています。静的サイトに移行する際に困ったのがCloudflareの設定です。WordPressをサーバーで動かしていれば、プラグイン「Super Page Cache」を使えばキャッシュ設定は簡単です。

静的サイトではプラグインは使えないので、自分で設定をするのですが、私には専門的な知識はなく、調べてもブラウザキャッシュの期間程度の情報しか得られませんでした。そこで、知識が得られるまでの間はプラグイン「Super Page Cache」の設定を参考にし、キャッシュ設定を行います。

AmazonスマイルSale
目次
  1. キャッシュ設定の考え方
  2. .htaccessに加えるコード
  3. リダイレクトルール
  4. キャッシュルール
  5. レスポンスヘッダー変換ルール

キャッシュ設定の考え方

htmlをキャッシュしHTTPレスポンスヘッダーに「cache-control : s-maxage=31536000, max-age=60」を加えます。ステータスコード「200」と「404」をキャッシュします。.htaccessにコードを加え、ファイルのキャッシュ設定をします。

手を加えるのはサーバーにアップロードしている「.htaccess」とCloudflareのルールの項目です。

.htaccessに加えるコード

.htaccessに下記コードを加えます。拡張子別にCache-Controlヘッダーを出力します。また、robots.txtをキャッシュから除外します。

<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType application/xml "access plus 0 seconds"
ExpiresByType text/xsl "access plus 0 seconds"
</IfModule>

<FilesMatch "\.(xml|xsl)$">
<IfModule mod_headers.c>
Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0"
</IfModule>
</FilesMatch>

<FilesMatch "robots\.txt">
<IfModule mod_headers.c>
Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0"
</IfModule>
</FilesMatch>

<FilesMatch "\.(css|js|pdf)$">
<IfModule mod_headers.c>
Header set Cache-Control "public, must-revalidate, proxy-revalidate, immutable, max-age=2592000, stale-while-revalidate=86400, stale-if-error=604800"
</IfModule>
</FilesMatch>

<FilesMatch "\.(jpg|jpeg|png|gif|ico|eot|swf|svg|webp|avif|ttf|otf|woff|woff2|ogg|mp4|mpeg|avi|mkv|webm|mp3)$">
<IfModule mod_headers.c>
Header set Cache-Control "public, must-revalidate, proxy-revalidate, immutable, max-age=31536000, stale-while-revalidate=86400, stale-if-error=604800"
</IfModule>
</FilesMatch>

リダイレクトルール

WordPressの基本機能であるwwwの統一、「www.example.com」にアクセスがあれば「example.com」にリダイレクトする機能をリダイレクトルールを使い設定します。逆に「example.com」へのアクセスを「www.example.com」へリダイレクトする場合はリダイレクトの条件と実行内容を逆に書き換えます。

受信リクエストが一致する場合…カスタム フィルタ式
フィールドオペレーター値
ホスト名次と等しいwww.example.com

実行内容

タイプ式ステータス コード
動的concat("https://example.com",http.request.uri.path)301

キャッシュルール

すべての受信リクエストをキャッシュの対象とすることでhtmlがキャッシュの対象になります。

受信リクエストが一致する場合…すべての受信リクエスト
キャッシュの適格性 (必要)キャッシュの対象
エッジ TTL (オプション)存在する場合は cache-control ヘッダーを使用し、存在しない場合は Cloudflare のデフォルト TTL でリクエストのレスポンス ステータスをキャッシュします

ステータスコード TTLは「200」と「404」をキャッシュし、それ以外はバイパスするために下記の様にしました。

次の値以下199ストアなし
範囲201〜403ストアなし
次の値以上405ストアなし

レスポンスヘッダー変換ルール

htmlのHTTPレスポンスヘッダーに「cache-control : s-maxage=31536000, max-age=60」を加えます。

受信リクエストが一致する場合…カスタム フィルタ式

だだし、.htaccessでcache-controlを付与している拡張子とrobots.txtは除外します。ANDで除外するものを加えます。下の例では「.xml」だけを表示していますが、すべての拡張子とrobots.txtを「URIパス」で加えます。

フィールドオペレーター値
ホスト名ワイルドカードexample.com
URIパス次を含まない.xml
ヘッダー名値
スタティック設定cache-controls-maxage=31536000, max-age=60

最後までお読みいただき、誠にありがとうございます。