.htaccess
.htaccess (Hypertext Access)
概要(サマリー)
.htaccess(ドットエイチティーアクセス)は、Apacheというウェブサーバーソフトウェアで使われる設定ファイルである。ファイルを置いたディレクトリ以下に対して、URLのリダイレクトやアクセス制限、エラーページの指定など、サーバーの動作をコントロールできる。
名前の先頭にドット(.)がついているため、LinuxやmacOSでは通常「隠しファイル」として扱われる。WordPressのサイトを運営していると、ほぼ確実に.htaccessファイルの存在に気づく場面があるだろう。
詳細解説
.htaccessとは何か
Apache(アパッチ)というサーバーソフトウェアは、通常httpd.confというメインの設定ファイルで動作を決める。しかし本番環境ではサーバー全体の設定ファイルを直接編集できないことが多い。そこで.htaccessを使うと、Apache側で許可されている範囲内で、特定のディレクトリ単位の設定を変更できる。
.htaccessでできること
主な使い方は次のとおりだ。
- URLリダイレクト: 古いURLから新しいURLへリダイレクトする(301・302)
- HTTPS強制: HTTPでアクセスされたときにHTTPSへ自動転送する
- アクセス制限: 特定のIPアドレスやパスワードでディレクトリを保護する
- カスタムエラーページ: 404エラー時に独自のページを表示する
- URL書き換え:
example.com/page?id=5をexample.com/page/5のようにきれいなURLに変換する
WordPressのインストール後に自動生成される.htaccessの例を見てみよう。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
このコードはWordPressのURL書き換えルールで、URLが実際のファイルやディレクトリに一致しない場合はすべてindex.phpで処理するよう指示している。
設置場所とスコープ
.htaccessは配置したディレクトリ以下にのみ効果が及ぶ。サイト全体に設定を反映したい場合はルートディレクトリに置く。サブディレクトリに別の.htaccessを置くと、より深い階層の設定を上書きできる。
.htaccessが動作しない場合
.htaccessが機能するには、Apacheのhttpd.confでAllowOverrideによって該当する設定の上書きが許可されている必要がある。AllowOverride Noneの場合は.htaccessが完全に無視される。レンタルサーバーでは多くの場合有効になっているが、環境によっては確認が必要だ。
HTTPS強制の設定例
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
この設定を追加することで、HTTPでアクセスしてきたユーザーを自動でHTTPSにリダイレクトできる。
セキュリティ上の注意点
.htaccessは強力な設定ができる反面、誤った記述をするとサイト全体がアクセス不能になることがある。変更前には必ずバックアップを取ること。また、.htaccessファイル自体が外部から閲覧されないよう、以下の設定を追加しておくのが安全だ。
<Files .htaccess>
Require all denied
</Files>
Apache 2.4系では、アクセス拒否には上のようなRequire all deniedを使う。サーバー全体の設定を直接変更できる環境では、Apache公式ドキュメントでも.htaccessよりメイン設定ファイル側で管理する方が推奨される。.htaccessは便利だが、読み込みのたびに確認されるため性能面の影響があり、権限やアクセス制限のルール記述を誤るとセキュリティホールを作ることもあるため、慎重に扱うべきである。
AIコーディングとの関係
AIに.htaccessの記述を依頼するときは「何をしたいか」を具体的に伝えると正確な構文を生成してくれる。たとえば「HTTPをHTTPSにリダイレクトする.htaccessを書いて」「指定したIPアドレス以外はアクセスを拒否する設定を書いて」といった形で依頼しよう。ただし、AIが生成した設定が自分のサーバー環境(ApacheのバージョンやモジュールのON/OFF)に合っているか確認することが重要だ。
よくある勘違い
.htaccessはどのサーバーでも使える?
.htaccessはApache専用の設定ファイルである。NginxなどほかのWebサーバーでは使えない。Nginxの場合はnginx.confなどのサーバー設定ファイルで同様の設定を行う。
.htaccessを削除しても大丈夫?
Apache環境でWordPressのパーマリンク設定を使っている場合、.htaccessはURLの書き換えに重要な役割を持つ。誤って削除すると、トップページ以外すべて404エラーになる場合がある。一方、Nginx環境では.htaccessを使わず、サーバー設定側で同様のルールを書く。削除前に必ず内容を確認しバックアップを取ること。
.htaccessを編集すればなんでも変更できる?
.htaccessで変更できるのはAllowOverrideで許可された設定のみであり、サーバー全体のすべての設定を変更できるわけではない。管理者権限が必要な設定はhttpd.conf側で行う必要がある。
まとめ
.htaccessはApacheウェブサーバーのディレクトリ単位設定ファイルで、URLリダイレクト・アクセス制限・HTTPS強制などが実現できる- WordPressのURL書き換えには必須のファイルで、削除するとサイトが壊れる可能性がある
- ApacheのAllowOverride設定が有効になっていないと機能しない
- Nginxではこのファイルは使えない
- 変更前には必ずバックアップを取り、AIが生成した設定は自環境で動作確認することが重要
情報ソース
より詳しくAIに聞いてみよう
- .htaccessとは何か、初心者向けに説明してください。
- WordPressで使われている.htaccessの設定内容を解説してください。
- .htaccessでHTTPをHTTPSにリダイレクトする方法を教えてください。
- NginxとApacheの設定の違いを、.htaccessを例に説明してください。
- AIに.htaccessの設定を書いてもらうときの効果的な指示の出し方を教えてください。