.htaccess完全入門:リダイレクト・URL書き換え・アクセス制限の使い方
これまでの連載で、Apacheの基本からインストール、`httpd.conf`による設定、そしてバーチャルホストを使った複数サイトの運営まで、サーバー管理の基礎をがっちり固めてきました。本当にお疲れ様でした!さあ、いよいよApache編の最終回です。今回は、Webサイト運営において最強の味方となる「魔法のファイル」、.htaccess(ドットエイチティーアクセス)を徹底解説します。
「特定のページを新しいURLに転送したい」「URLを短く、美しく見せたい」「特定のディレクトリにパスワードをかけたい」…そんなWebサイト運営者の願いを、このファイル一つで叶えることができます。この記事では、.htaccessの基本的な使い方から、実用的な設定例まで、コピペですぐに使えるコードと共に紹介します。この記事をマスターすれば、あなたのサイト管理はもっと自由でパワフルになるはずです!
.htaccessとは?基本の「き」
.htaccessとは、Apacheが動作しているディレクトリ(フォルダ)単位で、サーバーの挙動を細かく制御するための設定ファイルです。`httpd.conf`が国全体の法律だとすれば、`.htaccess`はその地域だけで適用される条例のようなもの。サーバー全体の設定をいじることなく、サイトごと、あるいはフォルダごとに独自のルールを適用できるのが最大の魅力です。
.htaccessを有効にするための大前提
`.htaccess`を使うには、そのディレクトリに対する設定の上書きが許可されている必要があります。これは、`httpd.conf`やバーチャルホストの設定ファイル(`httpd-vhosts.conf`)内の、対象ディレクトリを指定する<Directory>ブロックで設定します。
以下のAllowOverride Allという一行が記述されていることを確認してください。もしNoneになっている場合は、Allに変更してApacheを再起動しないと、`.htaccess`に何を書いても無視されてしまいます。
<Directory "/path/to/your/site">
# この設定が "All" になっている必要がある
AllowOverride All
Require all granted
</Directory>
この設定さえクリアしていれば、あとはテキストエディタで`.htaccess`という名前のファイルを作成し、ルールを適用したいディレクトリにアップロードするだけで準備完了です。
1. リダイレクト:ユーザーを別のページへ案内する
リダイレクトは、サイトの引越しやページのURLが変更になった際に、古いURLへのアクセスを自動的に新しいURLへ転送する機能です。SEOの観点からも非常に重要です。
特定のページをリダイレクトする
最もシンプルなリダイレクトです。`old.html`へのアクセスを、新しい`new.html`へ転送します。「301」は、この転送が「恒久的」なものであることを示し、検索エンジンにURLが完全に移動したことを伝えます。
Redirect 301 /old.html http://www.example.com/new.html
2. URL書き換え:mod_rewriteでURLを美しく
mod_rewriteは、Apacheの中でも特に強力なモジュールで、URLを裏側で書き換える(リライトする)ことができます。これにより、ユーザーが見るURLは美しいまま、サーバー内部では別のURLとして処理させることが可能になります。
mod_rewriteを使うには、まず「これから書き換えエンジンを使います」という宣言が必要です。
RewriteEngine On
「wwwあり/なし」を統一する
`example.com`と`www.example.com`のどちらでアクセスされても、URLを`www.example.com`に統一します。これはサイトの評価を分散させないために、SEO上とても有効な設定です。
RewriteEngine On
# アクセスされたホスト名が 'example.com' だったら
RewriteCond %{HTTP_HOST} ^example\.com$
# URL全体を 'www.example.com' へ恒久的にリダイレクトする
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
常時SSL化:httpへのアクセスをhttpsへ強制する
セキュリティの観点から、今やWebサイトの常時SSL化(https通信)は必須です。httpでアクセスされた場合でも、自動的にhttpsへ転送します。
RewriteEngine On
# httpsでの接続でなかったら
RewriteCond %{HTTPS} off
# URL全体をhttpsの同じパスへリダイレクトする
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
動的なURLを静的なURLに見せかける
例えば、`example.com/user.php?id=123` のようなパラメータ付きのURLを、`example.com/user/123` のようにシンプルで分かりやすいURLに見せかけます。
RewriteEngine On
# 'user/数字' という形式のURLだったら
RewriteRule ^user/([0-9]+)/?$ /user.php?id=$1 [L]
この設定により、ユーザーは美しいURLを使い続けられ、開発者はパラメータでデータを扱いやすくなります。
3. アクセス制限:特定の場所に鍵をかける
会員専用ページなど、特定の人だけに閲覧を許可したいディレクトリにパスワード認証(ベーシック認証)をかけることができます。
ベーシック認証の設定
ベーシック認証には、`.htaccess`と、パスワードを記述する`.htpasswd`の2つのファイルが必要です。まず、鍵をかけたいディレクトリに以下の内容で`.htaccess`を設置します。
AuthType Basic
# 認証ダイアログに表示するメッセージ
AuthName "Secret Area"
# ユーザー名とパスワードが書かれたファイルの場所を指定
AuthUserFile /path/to/.htpasswd
# 認証された有効なユーザーのみアクセスを許可
Require valid-user
重要: AuthUserFileで指定する`.htpasswd`のパスは、必ずWebからアクセスできない安全な場所(ドキュメントルートの外)を指定してください。
.htpasswdファイルの作成
次に、ユーザー名と暗号化されたパスワードを記述する`.htpasswd`ファイルを作成します。これはサーバーのコマンドラインで`htpasswd`コマンドを使って生成するのが一般的です。
初めてユーザーを作成する場合 (`-c`オプションで新規作成):
htpasswd -c /path/to/.htpasswd user1
2人目以降のユーザーを追加する場合 ( `-c` は付けない):
htpasswd /path/to/.htpasswd user2
コマンドを実行するとパスワードの入力を求められます。入力すると、指定したパスに`.htpasswd`ファイルが作成・更新されます。
その他、便利な設定例
カスタムエラーページの表示
「404 Not Found」などのエラーが発生した際に、サーバーの素っ気ないエラーページではなく、自分でデザインしたオリジナルのページを表示させます。
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html
特定のIPアドレスからのアクセスを拒否する
迷惑なアクセスや、特定のIPアドレスからのアクセスをブロックします。
Require all granted
Require not ip 123.45.67.89
Require not ip 192.168.1.0/24
まとめ
お疲れ様でした!これにて、全4回にわたるApache編は完結です。今回は、Webサイト運営における「かゆいところに手が届く」設定を実現する`.htaccess`について、その強力な機能の一部を学びました。
- 簡単なリダイレクトから、
mod_rewriteを使った高度なURL書き換えまで。 - ベーシック認証による、手軽で確実なアクセス制限。
- その他、エラーページやIP制限など、サイトの質を高める様々な設定。
`.htaccess`は非常に奥が深く、ここで紹介したのはほんの一例です。しかし、今日学んだ基本を応用すれば、あなたのアイデア次第で様々な制御が可能になります。ぜひ、色々な設定を試して「動く」を体験し、その便利さを実感してください。
Webサーバーの裏側を知ることで、あなたのWebクリエイターとしてのスキルは、より一層深みを増したはずです。これからのWeb制作ライフが、さらに楽しく、クリエイティブなものになることを願っています!