.htaccessの設定って、サーバーに疎いと敬遠しがち。だってよくわからないから。
なので、触らずに済むなら済ませたいし、触らずを得ない場合には教えてもらったコードをそのままコピペで「はい、終わり!」というケースが非常に多いです。
それでも「わかればすっごい便利だし、スマートに物事が解決することも多いんだろうなあ」とは常々思っているのも事実…。
たまたま見つけた以下のページが、解説付きで丁寧に紹介されていてとても勉強になりました。
WordPressサイト用の.htaccess例 | dogmap.jp
見えないところのちょっとしたチューニングって、渋いですよね。
導入してみました。
以下は.htaccessの記述ですが、dogmap.jp | 独断と偏見の何でもレビュー。since Feb. 27, 2005 さんで紹介されている方法そのまんまです…。
AddType image/x-icon .ico <IfModule mod_deflate.c> SetOutputFilter DEFLATE BrowserMatch ^Mozilla/4 gzip-only-text/ #gzip BrowserMatch ^Mozilla/4\.0[678] no-gzip #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について
mod_deflate
の概要をかなりざっくりと説明すると、「指定したファイルを圧縮してサイズを小さくして送る」ということでいいでしょうか?間違っていたらご指摘ください。
↓mod_deflate
について
Webサイトの高速化 ルール4 コンポーネントを圧縮しよう! (Yahoo! developer netoworkより翻訳) | 株式会社インターオフィス
ただ、以下のサイトで言及されていましたが、使用に適した環境と適していない環境があるようなので、そのあたりは自己責任で…。まったく効果がないだけでなく、逆に悪影響を及ぼす場合もあるようです。(その判断がまったくできない…。)
【帯域対策】Apacheのモジュールmod_deflateで転送量を大幅削減! – エーエイチレフ linuxサーバー技術情報
mod_expiresについて
mod_expires
の概要をざっくり説明すると、ファイルをキャッシュさせてページのロードを高速化させる機能です。多くは画像ファイルのキャッシュに使用していたらしいですが、それ以外のファイル(JavascriptやFlashファイルなど)もみんなキャッシュさせちゃおう、ってところでしょうか。また、キャッシュの有効期限も設定できます。
以下のサイトによるとこれが一番効果があるそうですが、有効期限を考えもなしも安易に設定するとかなり痛いことになるので、注意が必要ですね。
Webサイトの高速化 ルール3 Expiresヘッダーを追加しよう! (Yahoo! developer netoworkより翻訳) | 株式会社インターオフィス
ETagについて
↓ETag
についてはこちらで詳しく説明されています。なんとなくわかりましたが、詳細はよくわかりません(笑)。
Webサイトの高速化 ルール13 ETagを正しく設定する! (Yahoo! developer netoworkより翻訳) | 株式会社インターオフィス
本来は便利な機能ですが、サーバー環境などによってはそうではなくなる場合もあるし、ETagの機能を使わなくてもいい場合ならオフにしときましょ、ということで合っているのかな?
アクセスされたくないファイルの指定
wp-config.php、wp-mail.php、install.phpにアクセスできないようにブロックします。
<FilesMatch "^(wp-config\.php|wp-mail\.php|install\.php|\.ht)"> order allow,deny deny from all </FilesMatch>
Order allow,deny
ですが、これ、記述の順序をいつも悩むんです。許可してから拒否?拒否してから許可?
今回の場合、順番としては、まず基本的にすべて許可して(Allow
)、次に特定のファイルだけをアクセス拒否(Deny
)する感じ?だから、Order allow,deny
です。
アクセス制限の記述(Order, Allow, Deny) – アクセス制限 – Apache入門
404エラーの対処について
存在しないページのURLでアクセスされた場合に、Wordpressに404エラー出力させずに、Apacheに直接出力させるんだそうな。その方がサーバーの負荷が低くなります。なるほど、言われりゃその通りなんですが、そんな気配り思いつかない…。うーん、さすが。ということで、以下の一文をmod_rewrite
の中に追加しているようです。
RewriteCond %{REQUEST_FILENAME} !\.(html?|xml|xsl|js|css|jpe?g|png|gif|ico)$
※URLの最後にhtmlが付くようにしている場合には、html?|
を削除するように。