Luxeritas 推奨 .htaccess 設定で Internal Server Error
SEO 最適化、多機能で高速を謳っている WordPress Theme Luxeritas の開発者さんが、テーマの公開と共に .htaccess による高速化の方法とサンプルコードを公開してくれています。
この .htaccess による高速化はテーマに適用するものではないので、他のテーマでも汎用的に使えるものとなっています。
Luxeritas 3.14.2 から Luxeritas 3.15.0 にアップデートしたタイミングで、テーマのパッケージに含まれる .htaccess のサンプルコードにも変更が有りました。
セキュリティ向上の為のコード追加と、重複したコードをまとめてコードをスリム化し、既存のコードにもいくつかの変更が加えられています。
Luxeritas 3.15.0 の .htaccess に追加して高速化するサンプルコードは
# MIME Type 追加
<IfModule mime_module>
AddType text/cache-manifest .appcache
AddType image/x-icon .ico
AddType image/svg+xml .svg
AddType application/x-font-ttf .ttf
AddType application/x-font-woff .woff
AddType application/x-font-woff2 .woff2
AddType application/x-font-opentype .otf
AddType application/vnd.ms-fontobject .eot
</IfModule>
<IfModule mod_headers.c>
# プロクシキャッシュの設定 (画像とフォントをキャッシュ)
<FilesMatch "\.(ico|jpe?g|png|gif|svg|swf|pdf|ttf|woff|woff2|otf|eot)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
# プロキシサーバーが間違ったコンテンツを配布しないようにする
Header append Vary Accept-Encoding env=!dont-vary
# セキュリティ向上策
Header set X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options "nosniff"
Header set X-XSS-Protection "1; mode=block"
# Enable Keep-Alive を設定
<IfModule mod_env.c>
SetEnv KeepAlive On
SetEnv KeepAliveTimeout 15
SetEnv MaxKeepAliveRequests 100
</IfModule>
Header unset Connection
#Header set Connection keep-alive
# ETags(Configure entity tags) を無視する設定
Header unset ETag
# ブラウザキャッシュの設定
<IfModule mod_expires.c>
ExpiresActive On
# キャッシュ初期化 (1秒に設定)
ExpiresDefault "access plus 1 seconds"
# MIME Type ごとの設定
ExpiresByType text/css "access plus 1 weeks"
ExpiresByType text/js "access plus 1 weeks"
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 image/svg+xml "access plus 1 year"
ExpiresByType application/pdf "access plus 1 weeks"
ExpiresByType application/json "access plus 1 weeks"
ExpiresByType application/javascript "access plus 1 weeks"
ExpiresByType application/x-javascript "access plus 1 weeks"
ExpiresByType application/x-shockwave-flash "access plus 1 weeks"
ExpiresByType application/x-font-ttf "access plus 1 year"
ExpiresByType application/x-font-woff "access plus 1 year"
ExpiresByType application/x-font-woff2 "access plus 1 year"
ExpiresByType application/x-font-opentype "access plus 1 year"
ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
</IfModule>
</IfModule>
FileETag None
# Gzip圧縮の設定
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
# 古いブラウザでは無効
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch \bMSIE\s(7|8) !no-gzip !gzip-only-text/html
# 画像など圧縮済みのコンテンツは再圧縮しない
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico|eot|woff|woff2)$ no-gzip dont-vary
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/js
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE application/json
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-font-ttf
#AddOutputFilterByType DEFLATE application/x-font-woff
#AddOutputFilterByType DEFLATE application/x-font-woff2
AddOutputFilterByType DEFLATE application/x-font-opentype
#AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
</IfModule>
症状が出たのは wpX クラウドですが、上記コードをそのまま .htaccess に追記すると 500 Internal Server Error が出てページにアクセス出来なくなります。
どうも wpX クラウドでは Keep-Alive の詳細設定までは許可していないらしく、下記コードの部分が問題になっている様です。
# Enable Keep-Alive を設定
<IfModule mod_env.c>
SetEnv KeepAlive On
SetEnv KeepAliveTimeout 15
SetEnv MaxKeepAliveRequests 100
</IfModule>
Header unset Connection
#Header set Connection keep-alive
この部分をまるっと削除するか、Luxeritas 3.14.2 以前で使われていたコード
# Enable Keep-Alive を設定
Header set Connection keep-alive
に修正したところ、500 Internal Server Error は出なくなりました。
公開されている .htaccess の高速化コードに問題が有る訳ではなく、サーバの仕様によるものなので、エラーが出なければそのまま使用しても良いですし、もし wpX 系のサーバで 500 Internal Server Error が出る様なら改善出来るかもしれません。