htaccess

.htaccess は、Apache が設定変更をディレクトリ毎に管理するための分散型の設定ファイルです。

WordPress は、このファイルを利用して、Apache がルートディレクトリやサブディレクトリからファイルをどのように取り出すかを制御します。最も注目すべき点は、WordPress はきれいなパーマリンクを実現するために、このファイルを変更することです。

この文書は、おかしくなった .htaccess ファイルの復元の役に立つかもしれません(例えばプラグインの誤動作)。

WordPress の基本形

# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress

マルチサイト

WordPress 3.5 以降

WordPress 3.5 以降でマルチサイトを有効に場合には、下記のいずれかを使います。

サブフォルダー方式の例

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

サブドメイン方式の例

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

WordPress 3.4 以前

もともと WordPress 3.4 以前をインストールしていた時にマルチサイトを有効にした場合、下記のいずれかを使う必要があります :

サブフォルダー方式の例

WordPress 3.0 through 3.4.2

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
# END WordPress

サブドメイン方式の例

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule . index.php [L]
# END WordPress

一般的な例

Options

前に + を付けたオプションは、現在有効なオプションへ追加されます。前に  を付けたオプションは現在有効なオプションから削除されます。

Options ディレクティブ の有効な値は、以下を任意に組み合わせたものです。

None

すべてのオプションを無効にする

All

MultiViews を除くすべてのオプションを有効にする。これがデフォルト。

ExecCGI

mod_cgi による CGI スクリプトの実行を許可する。

FollowSymLinks

サーバが、このディレクトリ内でシンボリックリンクをたどれるようにする。

Includes

mod_include によるサーバーサイドインクルードを許可する。

IncludesNOEXEC

SSI を有効にするが、#exec cmd#exec cgi は無効にする。

Indexes

もし、URL がディレクトリにマップするリクエストであって、かつ DirectoryIndex で指定したファイルが無ければ、ディレクトリ内の一覧を整形して返す。

MultiViews

mod_negotiation による コンテントネゴシエーション された “MultiViews” を許可する。

SymLinksIfOwnerMatch

シンボリックリンクの参照先とシンボリックリンク自体の所有ユーザ ID が同じ場合のみ、シンボリックリンクをたどる。

次の例はすべてのオプションを無効にした上で、FollowSymLinks だけを有効にします。これは mod_rewrite に必要な設定です。

Options None
Options FollowSymLinks

DirectoryIndex

DirectoryIndex ディレクティブは、ディレクトリ自体がリクエストされた時に Apache が返すファイルを指定します。

複数の URL を指定できます。その場合、最初に見つかった URL が使用されます。

DirectoryIndex index.php index.html /index.php

DefaultLanguage

DefaultLanguage ディレクティブは、明示的な言語タグが指定されていないファイルについて使用する、デフォルトの言語を指定します。

DefaultLanguage en

デフォルトの文字セット

HTTP ヘッダーに含めて送信されるデフォルトの文字エンコーディングを指定します。Setting charset information in .htaccess を参照してください。

AddDefaultCharset UTF-8

特定のファイルタイプに文字セットを指定する

AddType 'text/html; charset=UTF-8' .html

特定のファイルについてセットする

AddCharset UTF-8 .html

ServerSignature

ServerSignature ディレクティブは、サーバが生成するドキュメントの末尾に付けるフッターの設定を行います。サーバのバージョンと仮想ホスト名を含む 1 行を、サーバが生成するドキュメント(エラーメッセージ、FTP のディレクトリリスト、mod_status や mod_info の出力など)へ追加できます。

On

サーバのバージョン、稼動中の仮想ホストの ServerName が書かれた 1 行を追加

Off

フッターをつけない

Email

参照されたドキュメントの ServerAdmin を指す “mailto:” を追加

SetEnv SERVER_ADMIN admin@site.com
ServerSignature Email

ファイルをダウンロードさせる

下記の例は、指定した拡張子を持つファイルがリクエストされた場合にブラウザーに表示するのではなく、「名前をつけて保存」などのダイアログでクライアントがダウンロードできるようにします。

AddType application/octet-stream .avi .mpg .mov .pdf .xls .mp4

HTTP 圧縮

AddOutputFilter ディレクティブは、ファイル名の拡張子にフィルターを対応させます。フィルターは、クライアントへ送られる前に応答内容を処理します。これは、ほかのところで定義されたフィルター(SetOutputFilter と AddOutputFilterByType を含む)に加えて実行されます。マッピングは、実施済みのマッピングにマージされます。同じ拡張子についてすでにマッピングがあると、それを上書きします。

こちらも参照ください:  https://developers.google.com/speed/docs/insights/EnableCompression

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

特定のファイルを圧縮する

SetOutputFilter DEFLATE

カスタム HTTP ヘッダーを送信

Header ディレクティブは、すべてのリクエストまたは特定のファイルについて、追加の HTTP ヘッダーを送信します。サイトの HTTP ヘッダーは次のようなツールで見ることができます: Firebug, Chrome Dev Tools, Wireshark または オンラインツール

Header set X-Pingback "http://www.askapache.com/xmlrpc.php"
Header set Content-Language "en-US"

HTTPヘッダーの設定解除

これにより、HTTPヘッダの設定が削除されます。always を指定すると、非常に強力にヘッダの削除が行われます。

Header unset Pragma
Header always unset WP-Super-Cache
Header always unset X-Pingback

ログインのパスワード保護

これは wp-login.php ファイルを保護するのにとても便利です。パスワード生成に htpasswd generator を利用できます。

Basic 認証

<Files wp-login.php>
 AuthType Basic
 AuthName "Password Protected"
 AuthUserFile /full/path/to/.htpasswd
 Require valid-user
 Satisfy All
 </Files>

Digest 認証

<Files wp-login.php>
AuthType Digest
AuthName "Password Protected"
AuthDigestDomain /wp-login.php https://www.askapache.com/wp-login.php
AuthUserFile /full/path/to/.htpasswd
Require valid-user
Satisfy All
</Files>

IP アドレス制限

特定の IP アドレスにだけにアクセスを許可する方法です。

ErrorDocument 401 default
ErrorDocument 403 default

<Files wp-login.php>
Order deny,allow
Deny from all
Allow from 198.101.159.98 localhost
</Files>

機密ファイルを保護

この例は、wp-config ファイル、error_log、php.ini および htaccess/htpasswd ファイルへの Web アクセスを拒否します。

<FilesMatch "^.(error_log|wp-config.php|php.ini|.[hH][tT][aApP].)$">
Order deny,allow
Deny from all
</FilesMatch>

SSL を要求する

この例は、SSL を強制し、正式なホスト名を要求します。これらの条件を満たさなければ SSL バージョンへリダイレクトします。/wp-admin/.htaccess の中で役立ちます。

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "www.wordpress.com"
ErrorDocument 403 https://www.wordpress.com

外部リソース

あわせて読もう

この記事は役に立ちましたか ? どうすればさらに改善できますか ?