よりパフォーマンスの良い WordPress サイトを構築したいならば .htaccess ファイルを修正しましょう。
Webサーバに apache 2系を使用しているサイト用に、私が書いた .htaccess ファイルを元に解説します。
基本方針は
- mod_deflate が使える場合は、有効にしてコンテンツを圧縮転送する。
- mod_expires が使える場合は、有効にして画像ファイル等の静的ファイルをブラウザにキャッシュさせる。
- 適切な ETag を発行して、ブラウザのキャッシュを制御する。
- アクセスしてほしくない WordPress ファイルに対するアクセスをブロックする。
- 存在しない静的ファイルに対してアクセスされた場合、WordPressを起動させない。
まず、私が作成した .htaccess ファイルを提示します。
AddType image/x-icon .ico <IfModule mod_deflate.c> SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary SetEnvIfNoCase Request_URI _\.utxt$ no-gzip #DeflateCompressionLevel 4 AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/atom_xml AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/x-httpd-php </IfModule> <ifModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 seconds" ExpiresByType text/html "access plus 1 seconds" ExpiresByType image/gif "access plus 2592000 seconds" ExpiresByType image/jpeg "access plus 2592000 seconds" ExpiresByType image/png "access plus 2592000 seconds" ExpiresByType image/x-icon "access plus 2592000 seconds" ExpiresByType text/css "access plus 604800 seconds" ExpiresByType text/javascript "access plus 216000 seconds" ExpiresByType application/x-javascript "access plus 216000 seconds" ExpiresByType application/x-shockwave-flash "access plus 216000 seconds" </ifModule> FileETag none <FilesMatch "^(wp-config\.php|wp-mail\.php|install\.php|\.ht)"> order allow,deny deny from all </FilesMatch> # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !\.(html?|xml|xsl|js|css|jpe?g|png|gif|ico)$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
mod_deflate が使える場合は、有効にしてコンテンツを圧縮転送する
テキストファイルを gzip 圧縮転送して転送量を減らし、表示の高速化を図ろうという設定です。
この設定が、なぜ有効かは、「Webサイトの高速化 ルール4 コンポーネントを圧縮しよう! 」辺りを参考にしてください。
3〜21行目が、mod_defrate を有効にしてコンテンツを圧縮転送するための設定です。
5〜7行目でブラウザが gzip 圧縮転送に対応しているか確認しています。
8〜9行目では、画像ファイルなどの gzip 圧縮転送しても、サイズが小さくならないファイルに対するアクセスの場合は対象外になるように設定しています。
11〜20行目で、実際に gzip 圧縮転送の対象になるファイルの mime タイプを指定しています。
mod_expires が使える場合は、有効にして画像ファイル等の静的ファイルをブラウザにキャッシュさせる
静的ファイルに有効期限を設定し、閲覧者のブラウザにあるキャッシュを有効に使ってもらおうという設定です。
この設定がなぜ有効かは、「Webサイトの高速化 ルール3 Expiresヘッダーを追加しよう! 」辺りを参考にしてください。
23〜35行目が、Expiresヘッダをセットするための設定です。
25行目で、デフォルトの有効期限を1秒に設定しています。
26〜34行目ではファイルの mime タイプにより、有効期限を設定しています。
- gif, jpg, png 等の画像ファイルは30日( = 2,592,000秒 )
- css は7日( = 604,800秒 )
- javascript, flash は2.5日( = 216,000秒 )
で設定しています。
これらの数字に根拠は無いので、運用に合わせて適宜変更してください。
適切な ETag を発行して、ブラウザのキャッシュを制御する
これも、キャッシュに絡む話。
有効期限が切れたブラウザ内のキャッシュファイルが変更されているかどうかは ETag を使ってチェックされるので、適切に出力してあげようという設定です。
この設定がなぜ有効かは、「ETagを正しく設定する!」辺りを参考にしてください。
37行目で、ETag を none に設定しています。
アクセスしてほしくない WordPress ファイルに対するアクセスをブロックする
これは、パフォーマンスアップのための設定では無いですが、以下の3ファイルについて外部からのアクセスを拒否しています。
- wp-config.php WordPress の設定ファイル
- wp-mail.php メール投稿を受信するための WordPress コアファイル。Ktai Entry, wp-shot 等のプラグインで代替可
- install.php WordPress インストール用のコアファイル。install 後は不要
39〜42行目で設定しています。
存在しない静的ファイルに対してアクセスされた場合、WordPressを起動させない
例えば、あなたのサイト( http://example.com/ )に favicon.ico が存在しない場合、http://example.com/faviccon.ico に対してアクセスがあった場合、WordPress のデフォルト設定のままだと、WordPress が起動してファイルの有無をチェックします。
ファイルが無いことは Apache でもわかっているのに、わざわざ WordPress を起動するのは、いたずらにサーバの負荷を増やすだけです。
# 特に favicon.ico は、多くのブラウザがあるかどうかチェックにくるファイルです。
で、そういった無駄なサーバ動作を減らすために48行目を追加してやります。
通常 WordPress を導入したサイトでは、指定された URL に合致するファイルが見つからない場合、WordPress を起動して処理を行いますが、48行目を追加することで静的ファイル( html|xml|xsl|js|css|jpeg|png|gif|ico )が存在しない場合は、WordPress が処理せずに直接 Apache が404を返すようになります。
ただし、WordPress のパーマリンクを *.html 等に設定している場合は、指定から html? を外してやってください。
mod_expiresのことを調べていて、こちらにたどり着きました。
お陰様でよく理解できました。ありがとうございました!
ピンバック: WordPressキャッシュプラグインの最終兵器「 WP Fastest Cache」
執筆陣のみなさま、はじめまして
最近WPで背伸びしたカスタマイズに挑戦しているものですが
行き詰ってしまいこちらにお邪魔した次第です
こちらのトピックには遠く及ばないような内容で大変恐縮ですが
ヒントだけでもいただければと思い不躾ながらコメントさせていただきます
現在、WPの投稿内にHTML5のvideoタグを使って動画をアップしようと試みています
MediaElement.js – HTML5 Audio and Videoというプラグインを取り入れ設定自体はできたのですが、
firefoxでのみ動画が再生されません
クロームやIEでは、mp4ファイルの読み込みが問題なくできており再生に成功しているのですが、firefoxでは.ogv ファイル形式で読み込ませなければならないようです
ファイル自体は用意できたのですが、さらに.htaccess内での設定記述もしてあげる必要があるということで以下のように書き換えました
しかし、500エラーが出てしまい途方に暮れています
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
SetEnvIf Request_URI “.*” AllowCountry
SetEnvIf Request_URI “.*” WpLoginNoLimit
-ここから追記-
AddType video/ogg .ogg .ogv
AddType video/mp4 .mp4
AddType application/ogg .ogg .ogv
-ここまで-
なにか記述ルールが間違っているのでしょうか
ちなみに、サーバーはxdomainの無料サーバーを使っており、管理画面からの編集が可能になっています
パーミッションの設定や、コードタイプなどはここから更新すれば問題なく反映されると考えてよろしいでしょうか
ヒントだけでもいただけましたら幸いです
よろしくお願いします!
このmod_deflate.cの設定では
メディアとしてUPしたPDFが表示されないッポイ
http://www.*****/uploads/201*/**/****.pdf
ピンバック: WordPressをPageSpeed InsightsでAにするまでの記録
ピンバック: プラグインは使わない!Wordpress カスタマイズまとめ40 | コムテブログ
ピンバック: ウェッブページの表示の速度を調べる « スタッフのブログ
ピンバック: 【wordpress】続・はじめの設定 | SBS
ピンバック: WordPress へのアクセスを最適化する .htaccess のリダイレクト設定 | Odysseygate.com
ピンバック: ITキヲスク | 2010年4/18〜4/24の週間ブックマーク
ピンバック: 最近のWordpress関連の記事をまとめました
ピンバック: [リンク] links for 2010/4/20 | Bonnie styles.
ピンバック: 2010年4月20日のWebクリップ | HuIn.Log