.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
フッターをつけない
参照されたドキュメントの 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 を利用できます。
<Files wp-login.php> AuthType Basic AuthName "Password Protected" AuthUserFile /full/path/to/.htpasswd Require valid-user Satisfy All </Files>
<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
外部リソース
- 公式 Apache チュートリアル: .htaccess ファイル
- Official Htaccess ディレクティブ クイックリファレンス
- Htaccess チュートリアル
- Google PageSpeed for Developers
- Stupid Htaccess Tricks
- Advanced Mod_Rewrite
この記事は役に立ちましたか ? どうすればさらに改善できますか ?
フィードバックを送信するにはログインする必要があります。