WordPress に最適な .htaccess の設定 (キャッシュと圧縮)

WordPressのロゴ

レンタルサーバなどで広く使われている Apache のファイル .htaccess を編集することで、一部のリソースをキャッシュしたり圧縮することができます。 ページをより高速に効率的に表示できるようになるので、初心者の方もできるだけ対応するようにしましょう。

.htaccess を編集するようなプラグインが存在するようですが推奨しません。 不可解であったり問題がある状態に設定されたとき、それを検知することが極めて困難だからです。 特に「良く分からないから全部自動にしてしまおう」というタイプの人なら難しいです。

このページでは単純に設定する方法しか解説しません。 もう少しだけ詳しい情報は「htaccess を使ったキャッシュと gz エンコード(圧縮)の設定」のページを参照してください。

.htaccess ファイルの場所

特定の WordPress に対応する .htaccess ファイルは、WordPress のフォルダ(ディレクトリ) の直下に置かれています。 ほとんどの場合にインストール時に生成されているものです。同じ階層に wp-admin フォルダや、 wp-content フォルダ、wp-activate.php ファイルなどがあります。

  • WordPress フォルダの階層構造の例
    • wp-admin
    • wp-content
    • wp-includes
    • .htaccess

.htaccess ファイルが存在しないときは、新しいテキストファイルを生成し、名前を .htaccess に変更することで対応できます。 しかしながら .htaccess には WordPress 用の記述などが含まれることがあり、それらに関してはここでは言及しません。

.htaccess ファイルに記述する

特に以前に設定した記憶がなければ、次のコードを .htaccess ファイルの末尾に追記して保存します。

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "access plus 1 days"
ExpiresByType text/css "access plus 1 days"
ExpiresByType text/javascript "access plus 1 weeks"
ExpiresByType image/gif "access plus 1 weeks"
ExpiresByType image/jpeg "access plus 1 weeks"
ExpiresByType image/png "access plus 1 weeks"
ExpiresByType application/javascript "access plus 1 weeks"
ExpiresByType application/x-javascript "access plus 1 weeks"
ExpiresByType application/vnd.ms-fontobject "access plus 1 weeks"
ExpiresByType application/x-font-ttf "access plus 1 weeks"
ExpiresByType application/x-font-opentype "access plus 1 weeks"
ExpiresByType application/x-font-woff "access plus 1 weeks"
</IfModule>

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-font-woff
</IfModule>

<IfModule mod expires.c> ~ がキャッシュの設定、<IfModule mod deflate.c> ~ が圧縮の設定です。 この設定で WordPress が扱う基本的なファイルのすべてがキャッシュと圧縮に対応するものと考えて良いです。

エックスサーバーの例

どこのレンタルサーバーでも概ね同じ結果が得られますが、WordPress をインストールした後、一切変更を加えていない .htaccess ファイルに今回の記述を追加すると次のようになります。

suPHP_ConfigPath /home/サーバーのパス

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/html "access plus 1 days"
ExpiresByType text/css "access plus 1 days"
ExpiresByType text/javascript "access plus 1 weeks"
ExpiresByType image/gif "access plus 1 weeks"
ExpiresByType image/jpeg "access plus 1 weeks"
ExpiresByType image/png "access plus 1 weeks"
ExpiresByType application/javascript "access plus 1 weeks"
ExpiresByType application/x-javascript "access plus 1 weeks"
ExpiresByType application/vnd.ms-fontobject "access plus 1 weeks"
ExpiresByType application/x-font-ttf "access plus 1 weeks"
ExpiresByType application/x-font-opentype "access plus 1 weeks"
ExpiresByType application/x-font-woff "access plus 1 weeks"
</IfModule>

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-font-woff
</IfModule>