.htaccess のスニペット集
このページは、.htaccess のスニペットをまとめる予定のページです。
目次
注意
- コードのライセンスは CC0 (クレジット表示不要、改変可、商用可) です。
セキュリティ関連ヘッダの追加
※ Apache に mod_headers モジュールが導入されている必要があります。
# フレームでの読み込みを同じサイト(同じオリジン)のみに制限
Header set X-Frame-Options SAMEORIGIN
# ブラウザにContent-Typeの推測をさせない
Header set X-Content-Type-Options nosniff
# XSSフィルタ
Header set X-XSS-Protection "1; mode=block"
キャッシュを有効化する
※ Apache に mod_expires モジュールが導入されている必要があります。
# ブラウザキャッシュの設定 (1週間)
ExpiresActive On
ExpiresDefault "access plus 1 week"
- ファイル (MIMEタイプ) ごとに設定したい場合は
ExpiresByType text/html "access plus 1 week"
などで設定ができます。
キャッシュを無効化する
※ Apache に mod_headers モジュールが導入されている必要があります。
Header set Cache-Control no-store
.css, .js のみキャッシュを無効化
<Files ~ "\.(css|js)$">
Header set Cache-Control no-store
</Files>
gzip圧縮
※ Apache に mod_deflate モジュールが導入されている必要があります。
# gzip圧縮の設定
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary
- 画像以外のすべてのファイルを圧縮します。(mod_deflate の設定の例から古い設定を除いたものです)
アクセス制限
.htaccess, .htpasswd のアクセス制限
<Files ~ "^\.(htaccess|htpasswd)$">
Deny from all
</Files>
メンテナンス表示
※ /path/to/maintenance.html
の箇所は実際のメンテナンス用のページのパスに置き換えてください。
ErrorDocument 503 /path/to/maintenance.html
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/path/to/maintenance.html
RewriteRule .* - [R=503,L]
ErrorDocument 503 /path/to/maintenance.html
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/path/to/maintenance.html
RewriteCond %{REMOTE_ADDR} !=111.111.111.111
RewriteRule .* - [R=503,L]
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>メンテナンス中</title>
</head>
<body>
<p>メンテナンス中です。しばらく経ってからアクセスしてください。</p>
</body>
</html>
Basic認証
※ /path/to/.htpasswd
の箇所は実際の .htpasswd の場所を指定してください。
AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null
AuthName "Basic Auth"
AuthType Basic
Require valid-user
wp-login.php のみBasic認証
<Files wp-login.php>
AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null
AuthName "Basic Auth"
AuthType Basic
Require valid-user
</Files>
URLの調整
※ Apache に mod_rewrite モジュールが導入されている必要があります。
www なしの URL を www 付きに変更する
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(?!www).
RewriteRule .* http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
www 付きの URL を www なしに変更する
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.
RewriteRule .* http://example.com%{REQUEST_URI} [R=301,L]
※ example.com
の部分は実際に使用するドメインに変更してください。
http の URL を https に変更する
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
利用言語 (Accept-Language) を見て英語サイトにリダイレクトする
RewriteEngine On
RewriteCond %{HTTP:Accept-Language} !^ja [NC]
RewriteRule ^$ /english/ [R=301,L]
- 言語設定が日本語以外の場合 (日本語を最優先にしていない場合)、
/
へのアクセスを/english/
にリダイレクトします。(ドキュメントルートの .htaccess 用の設定)
環境変数の設定
HTTP_AUTHORIZATION
RewriteEngine On
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
// $auth = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
$auth = isset($_SERVER['HTTP_AUTHORIZATION']) ? $_SERVER['HTTP_AUTHORIZATION'] : '';
HTTP_CONTENT_TYPE
RewriteEngine On
RewriteCond %{HTTP:Content-Type} .
RewriteRule .* - [E=HTTP_CONTENT_TYPE:%{HTTP:Content-Type}]
// $auth = $_SERVER['HTTP_CONTENT_TYPE'] ?? '';
$auth = isset($_SERVER['HTTP_CONTENT_TYPE']) ? $_SERVER['HTTP_CONTENT_TYPE'] : '';