# .htaccess for Lil variation (株式会社リルバリエーション)
# https://lil-variation.co.jp/
# ====================================
# 1. HTTPS強制リダイレクト(SSL対応)
# ====================================
RewriteEngine On
# HTTPSが有効でない場合、HTTPSにリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# ====================================
# 2. WWWあり/なしの統一(どちらか選択)
# ====================================
# オプションA: wwwなしに統一する場合(推奨)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# オプションB: wwwありに統一する場合(上記をコメントアウトして以下を有効化)
#
# RewriteEngine On
# RewriteCond %{HTTP_HOST} !^www\. [NC]
# RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
#
# ====================================
# 3. GZIP圧縮有効化(ページ読み込み高速化)
# ====================================
# HTMLファイルを圧縮
AddOutputFilterByType DEFLATE text/html
# CSSファイルを圧縮
AddOutputFilterByType DEFLATE text/css
# JavaScriptファイルを圧縮
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
# XMLファイルを圧縮
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
# JSONファイルを圧縮
AddOutputFilterByType DEFLATE application/json
# フォントファイルを圧縮
AddOutputFilterByType DEFLATE application/font-woff
AddOutputFilterByType DEFLATE application/font-woff2
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE font/otf
# SVGファイルを圧縮
AddOutputFilterByType DEFLATE image/svg+xml
# ====================================
# 4. ブラウザキャッシュ設定(パフォーマンス向上)
# ====================================
ExpiresActive On
# デフォルトのキャッシュ期間
ExpiresDefault "access plus 1 month"
# HTML(短めに設定)
ExpiresByType text/html "access plus 1 hour"
# CSS
ExpiresByType text/css "access plus 1 year"
# JavaScript
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType application/x-javascript "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"
# 画像ファイル
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
# フォントファイル
ExpiresByType application/font-woff "access plus 1 year"
ExpiresByType application/font-woff2 "access plus 1 year"
ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
ExpiresByType font/opentype "access plus 1 year"
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType font/otf "access plus 1 year"
# PDF
ExpiresByType application/pdf "access plus 1 month"
# キャッシュコントロールヘッダー
# 画像、CSS、JSのキャッシュ
Header set Cache-Control "max-age=31536000, public"
# HTMLのキャッシュ(短め)
Header set Cache-Control "max-age=3600, public, must-revalidate"
# ====================================
# 5. セキュリティ設定
# ====================================
# X-Frame-Options(クリックジャッキング対策)
Header always set X-Frame-Options "SAMEORIGIN"
# X-Content-Type-Options(MIMEタイプスニッフィング防止)
Header always set X-Content-Type-Options "nosniff"
# X-XSS-Protection(XSS攻撃対策)
Header always set X-XSS-Protection "1; mode=block"
# Referrer-Policy(リファラー情報の制御)
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# Content-Security-Policy(コンテンツセキュリティポリシー)
# 注意:厳しすぎる場合は調整してください
# Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://fonts.googleapis.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data:; connect-src 'self';"
# ディレクトリリスティングを無効化
Options -Indexes
# サーバー情報の非表示
ServerSignature Off
# ====================================
# 6. PHPセキュリティ設定
# ====================================
# エラー表示を無効化(本番環境)
php_flag display_errors Off
php_flag display_startup_errors Off
# ファイルアップロードサイズ制限
php_value upload_max_filesize 10M
php_value post_max_size 10M
# 実行時間制限
php_value max_execution_time 300
php_value max_input_time 300
# メモリ制限
php_value memory_limit 256M
# ====================================
# 7. 重要ファイルの保護
# ====================================
# .htaccessファイル自体へのアクセス拒否
Order allow,deny
Deny from all
# .gitファイルへのアクセス拒否
Order allow,deny
Deny from all
# 設定ファイルへのアクセス拒否
Order allow,deny
Deny from all
# バックアップファイルへのアクセス拒否
Order allow,deny
Deny from all
# ====================================
# 8. 文字エンコーディング設定
# ====================================
AddDefaultCharset UTF-8
AddCharset UTF-8 .html .css .js .xml .json .rss .atom
# ====================================
# 9. カスタムエラーページ(オプション)
# ====================================
# 403エラーページ(作成した場合に有効化)
# ErrorDocument 403 /403.html
# 500エラーページ(作成した場合に有効化)
# ErrorDocument 500 /500.html
# 403エラーページ(作成した場合に有効化)
# ErrorDocument 403 /403.html
# ====================================
# 10. モバイル対応
# ====================================
# モバイルフレンドリー設定
Header set Vary "User-Agent"
# ====================================
# 11. クリーンURLの設定(オプション)
# ====================================
# .htmlや.phpを省略できるようにする
RewriteEngine On
# .htmlを省略
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.html [NC,L]
# .phpを省略
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]