.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]
特定のIPアドレスではメンテナンス表示しないようにする場合 (例 111.111.111.111)
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]
/path/to/maintenance.html の例
<!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}]
PHP での使用
// $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}]

PHP での使用
// $auth = $_SERVER['HTTP_CONTENT_TYPE'] ?? '';
$auth = isset($_SERVER['HTTP_CONTENT_TYPE']) ? $_SERVER['HTTP_CONTENT_TYPE'] : '';