.htaccessは、Webサーバー上で強力なアクセス制御を実現するための設定ファイルだ。
特定のIPアドレスのアクセス制限、パスワード保護による認証、URLのリダイレクト設定、エラーページのカスタマイズなど、細かな制御をディレクトリ単位で簡単に実装できる。
近年は、SEO対策やセキュリティ対策の一環として、.htaccessを用いることもある。
SEO担当者の中には、.htaccessの運用を任されたという方もいるのではないだろうか。
一方で、以下のような疑問やお悩みも生じやすい。
「影響範囲がわかりづらい」
「httpd.confとの違いがよくわからない」
「設定ミスで社内の人間もアクセスできなくなった」
.htaccessは強力な機能だけに「できること」と「設定方法」をしっかり把握した上での運用を心掛けたい。
本記事では、マーケターやSEO担当者に向けて.htaccessの具体的な設定方法やシーン別の活用方法を紹介する。
1. htaccessとは
まずは、.htaccessの概要をおさえておこう。
1.1.「ディレクトリのふるまい」を制御する設定ファイル
.htaccessは「Apache(アパッチ)」というWebサーバーソフトウェアが持つ設定ファイルで「任意のディレクトリのふるまいを制御する」ために使用される。
ApacheはWebサーバーを構築するためのオープンソースソフトウェア(OSS)だ。
OSSのWebサーバーソフトとしては最もメジャーであり、現在でも非常に高いシェアを持つ。
.htaccessは、Apacheが稼働しているサーバーにおいて、特定のディレクトリやその配下のファイルに対して、さまざまな制限や動作の変更を指示できる。
具体的には、アクセス制御やリダイレクト設定、エラーページのカスタマイズなどが可能だ。
ちなみに他のWebサーバーソフト(NginxやIIS)では.htaccessが使用できない。
Nginxの場合はディレクトリ単位での振る舞いを制御する設定自体が無い。
また、IISでは「web.config」によって.htaccessと同様の設定が可能である。
Apache以外のWebサーバーソフトを使用する場合は注意しておこう。
1.2..htaccessは「ディレクトリ単位」で制御をおこなう
通常、Apacheの動作はサーバー全体の設定ファイルである「httpd.conf」によって制御される。
httpd.confは非常に便利なファイルだが、設定を変更するにはroot権限が要求される。
一方で.htaccessは、設定変更に対してroot権限が求められない。
共有サーバーやレンタルサーバーを使用していると、root権限が得られないことが多い。
.htaccessの変更にはroot権限が必要ないので、特定のディレクトリに対するアクセス制御を施す手段として用いられる。
「Webサイト全体では特定のアクセス制御を行わないが、管理画面だけはBasic認証を設定してパスワード保護を行いたい」といった場合、管理画面のディレクトリに.htaccessを設置すれば、制御が可能になる。
1.3..htaccessの使用は「原則として非推奨」
ただし、一般的に.htaccessの利用は推奨されていない。
その理由は以下2つだ。
- 気軽さに対して制御機能が強すぎるためミスを誘発しやすい
- セキュリティやパフォーマンスが低下する
詳しくみていこう。
気軽さに対して制御機能が強すぎためミスを誘発しやすい
ここまでの内容から「rootが無くても設定を変更できる便利なファイル」というイメージを持ったかもしれない。
しかし、実際に運用を続けていくと重大なミスを誘発することがある。
例えば、以下のようなインシデントは.htaccessの設定ミスが原因だ。
- 社内の担当者が管理画面にログインできない
- リモートワーカーがコンテンツにアクセスできない
- 「非公開」の対象とする記事を間違えてしまった
「root権限が不要」という気軽さに対して、.htaccessが持つ機能が強力すぎるため、運用次第では上記のような事象が頻発する。
セキュリティやパフォーマンスが低下する
.htaccessの利用は、セキュリティやパフォーマンスの面からも推奨されない。
実はApacheの公式サイトでも「.htaccessの利用は非推奨」とされているのだ。
.htaccessは、設置されたディレクトリにアクセスがあるたびにファイルが読み込まれる。
この動作はサーバーの負荷となり、大量のアクセスがあるサイトではパフォーマンスの低下を招く可能性がある。
また、.htaccessファイルが誤って公開されてしまうと、内部の設定が外部から閲覧される危険性がある。
不適切な記述によってサイトの動作に問題を引き起こす事態に発展しかねない。
1.4..htaccessの使用が推奨されるケース
逆に.htaccessの使用が推奨されるケースも把握しておこう。
.htaccessは基本的に「何らかの都合でディレクトリ単位の細かい制御が必要な場合」にのみ利用するべきだ。
例えば「1サーバーの中に複数のサイトを設置していて、root権限を持たないユーザーが管理している」というケースであれば、.htaccessを使用すべきだろう。
この場合、サイトごとの管理者はroot権限を持たないため、そのままではアクセス制御やコンテンツの公開・非公開などは行えない。
しかし、自分が管理しているサイトは管理する必要がある。
そこで、サイトのディレクトリに.htaccessを設置し、種々のコントロールを施すというわけだ。
2..htaccessの役割、できること
次に、.htaccessの役割やできることを具体的に見ていこう。
ここでは、具体的なユースケースを交えて、htaccessの役割を解説する。
2.1.前提:.htaccessの利用を可能にする
まず、大前提として「.htaccessが利用できる状態であるか」を確認しよう。
自身に管理者権限(root権限)がない場合は、権限を持つ担当者に連絡して以下の設定を変更してもらう必要がある。
『httpd.confの「AllowOverrideディレクティブ」をnoneからALLへ』
サーバー全体の設定を管理するhttpd.confには「AllowOverride」という項目がある。
この項目が「none」になっていると.htaccessは利用できない。
また「ALL」にするとあらゆる設定の上書きが可能になる。
もし「ALL」設定が許可されない場合は「Context」だけに絞ってもらうという手もある。
参考:Apache公式サイトによるAllowOverrideディレクティブの解説
出典:APACHE https://httpd.apache.org/docs/current/en/mod/core.html
基本的には情報システム担当者やサーバー管理者のタスクになるため「.htaccessを利用したい」という意思を伝えて設定を変更してもらおう。
役割1.特定のIPからのアクセスを制御する(IP制御)
.htaccessを利用することで、特定のIPアドレスからのアクセスを許可または拒否できる。
IP制御の利点は「シンプルで扱いやすい」ことだ。
「IP」という固定化された既知の情報で制御するため、ユーザーに対する負担がない。
特にパスワードを管理する負荷をかけないことは大きなメリットだ。
一方で、IPが動的に変化する環境(モバイルやVPNなど)には対応しづらいというデメリットがある。
ユースケース
- 社内向けのキャンペーンページやプロトタイプのテストページを、社内IPのみアクセス可能に設定する。
- 海外からの不正アクセスを防ぎ、日本国内の顧客だけにアクセスを限定する。
- 特定のクライアント企業専用のページを、その企業のIPアドレスだけに限定公開する。
役割2. コンテンツを特定の顧客にのみ公開する(Basic認証)
Basic認証を設定することで、パスワードを知っている人だけが特定のページにアクセスできる。
特定の顧客に対して限定的な情報を共有する際などには便利だ。
また、Basic認証は「人」に対する認証であることから、IP制御のような不都合は発生しない。
モバイル端末やVPNを活用するユーザーが多い場合でも、適切に制御できる。
一方で、ログイン情報の管理はユーザー側に委ねられるため、適切な管理体制が必須になることをおさえておこう。
ユースケース
- 新商品の詳細情報を、正式リリース前に特定のクライアントやパートナーだけに限定公開する。
- 営業部門が商談中の顧客にだけ、カスタマイズされた資料や動画をパスワードで保護したページにアップロードする。
- 限定キャンペーンや招待制プロモーションの専用ページを作成し、特定の顧客だけにアクセスを許可する。
役割3. コンテンツの統廃合、サイト移転時の「転送」
.htaccessを使うことで、古いURLを新しいURLにリダイレクトできる。
これは、サイトリニューアルやコンテンツ統廃合時に特に有効だ。
SEOの効果を維持しつつ、ユーザーに対して新しいコンテンツの在りかを伝えられる。
ユースケース
- サイトリニューアル時に、旧URLから新URLへ301リダイレクトを設定し、SEO評価を引き継ぐ。
- 同じコンテンツが複数のURLでアクセス可能な場合に、正規のURL(canonical URL)に統一し、検索エンジンの評価を最適化する。
- HTTPからHTTPSへのリダイレクトを設定し、セキュリティと検索順位の向上を実現する。
役割4. エラーページのカスタマイズ(ユーザーが閲覧したいであろうページへのガイドを設ける)
ユーザーが存在しないページにアクセスした際、デフォルトのエラーページでは混乱を招く可能性がある。
htaccessを使うことでエラーページをカスタマイズし、ユーザーがサイト内を回遊しやすくなる。
ユースケース
- 404エラーページに「人気のコンテンツ」や「トップページ」へのリンクを表示し、ユーザーの離脱を防止。
- 403エラー(アクセス禁止)の際に、適切なサポート窓口やFAQページを案内する。
- サーバーエラー(500エラー)の場合に、ユーザーに「しばらく時間をおいて再度アクセスしてください」と伝えることで、信頼を損なうリスクを軽減する。
役割5. サイト構造が外部に公開されることを防ぐ(セキュリティ対策)
.htaccessを使うことで、ディレクトリ構造が外部から見られるリスクを防げる。
オウンドメディアのセキュリティレベルを保ち、第三者による悪用を未然に防ぐための利用方法だ。
ユースケース
- ディレクトリリスティングを無効化して、公開するべきでない画像やファイルが不正にダウンロードされるリスクを防止する。
- 管理画面やプライベートエリアのURLを第三者に特定されないように保護する。
- セキュリティを向上させることで、ユーザーやクライアントからの信頼を強化する。
3..htaccessファイルの設置場所と設置手順
これまでも述べたように、.htaccessに記述した内容は「設置したディレクトリ、およびサブディレクトリに対してのみ有効」だ。
つまり、設置場所は「制御したいコンテンツや機能があるディレクトリ」になる。
「どこに置くか」によって、その設定が適用される範囲が変わることを覚えておこう。
.htaccessの設置場所については「大きなオフィスビル全体と各階のオフィス」をイメージすると良いだろう。
ルートディレクトリに.htaccessを置く場合は、ビル全体にセキュリティルールを適用するイメージだ(入り口で全員をチェックする)。
一方、サブディレクトリに.htaccessを置く場合は、特定のフロアにチェックをかけるイメージとなる(フロアの入り口と各部屋)。
3.1. Webサイト全体に適用したい場合
.htaccessファイルをWebサイトの一番上の階層(ルートディレクトリ)に置くと、サイト全体にその設定が反映される。
たとえば、Webサイト全体に「特定の人だけがアクセスできるようにする」というルールを適用したい場合、この場所に.htaccessファイルを置けば、すべてのページでそのルールが有効になる。
3.2. 特定の部分だけに適用したい場合
.htaccessファイルをサイトの特定のフォルダに置くと、そのフォルダ内のページやファイルだけに設定が適用される。
たとえば「管理画面だけにアクセス制限をかけたい」といった場合、管理画面用のフォルダに.htaccessファイルを置く。
3.3.サーバーへのアップロード手順
.htaccessファイルをローカル環境で編集する場合は、別途サーバーへのアップロード作業が必要になる。
サーバーへのアップロードは以下の6ステップで行える。
- FTPソフトやファイルマネージャーを用意する
- サーバーに接続する
- アップロード先を指定
- ファイルをアップロードする
- アップロード後にファイルを確認する
- 設定の動作を確認する
詳しくみていこう。
ステップ1.ツールやファイルマネージャーを用意する
まず、サーバーに.htaccessをアップロードするために必要なソフトとツールを用意しよう。
定番はFTPソフトだ。
しかし現在は、セキュリティ強度の低さから推奨されないこともある。
レンタルサーバーの場合は、管理画面にあるファイルマネージャーからアップロードできるだろう。
ステップ2.サーバーに接続する
FTPソフトの場合、以下の情報を使ってサーバーに接続する。
- サーバーのホスト名(例: ftp.example.com)
- ユーザー名とパスワード
- ポート番号(標準設定では21番)
なお、セキュリティの観点からFTPポート番号は「21盤以外」に変更されている場合もある。
「FTPポート=21番」という内容は広く知られており、悪意を持った第三者からの攻撃を受けやすいからだ。
事前に正しいポート番号を確認しておこう。
ステップ3.アップロード先を指定
FTPなどでサーバーに接続したら、アップロード先を指定する。
サイト全体に適用したい場合は、ルートディレクトリにアップロードする(通常は/public_html/など)。
特定のディレクトリにのみ適用したい場合は、そのディレクトリにアップロードする。
ステップ4.ファイルをアップロードする
作成した.htaccessファイルをドラッグ&ドロップするか「アップロード」ボタンを使って指定のディレクトリに転送する。
ステップ5.アップロード後にファイルを確認する
アップロード後、サーバー上のファイル一覧画面や管理画面からファイル名が「.htaccess」となっていることを確認する。
なお「隠しファイル扱い」になっていると表示されないこともある。
この場合は、FTPソフトの「隠しファイルを表示する」オプションを有効にしておこう。
ステップ6.設定の動作を確認する
ファイルのアップロードが完了したら、ブラウザで該当ページにアクセスして設定が正しく動作しているか確認する。
例えばリダイレクトの設定を記述したならば、旧URLにアクセスして新URLに転送されるかを確認する。
IP制御を記述した場合は、許可していないIPアドレスからのアクセスがブロックされるかをテストしよう。
4.ケース別.htaccessの記述方法
ケース別の記述のサンプルを記載して説明する。
ここで紹介するのは以下4つのケースだ。
- IP制御(許可、拒否)
- Basic認証(許可、拒否)
- リダイレクト(301、302)
- エラーページカイスタマイズ
詳しくみていこう。
ケース1.IP制御
IP制御は、特定のIPアドレスからのアクセスを許可または拒否する設定だ。
内部アクセス専用のページや、特定地域やネットワークのみからの接続を許可したい場合に用いる。特に社内専用システムや一部の管理ページで利用されるケースが多い。
IP制御の記述方法
特定のIPアドレスのみアクセス許可
<RequireAll>
Require ip 192.168.1.1
Require ip 203.0.113.0/24
</RequireAll>
特定のIPアドレスを拒否
<RequireAll>
Require all granted
Require not ip 192.168.1.1
Require not ip 203.0.113.0/24
</RequireAll>
ケース2.Basic認証
ページやディレクトリにアクセスする際、ユーザー名とパスワードを入力する必要がある認証システムである。
機密情報を含むページや、一部の限定公開エリアへのアクセス制限を行う際に使用される。
Basic認証の記述方法
AuthType Basic
AuthName “Restricted Access”
AuthUserFile /path/to/.htpasswd
Require valid-user
ちなみにAuthUserFileに指定する.htpasswdファイルは、以下のコマンドで作成可能である。
htpasswd -c /path/to/.htpasswd username
ケース3.リダイレクト(301、302)
リダイレクトは、古いURLを新しいURLに転送する際に使用する。
URL構造を変更した場合や、一時的にページを移動する場合に有効だ。
リダイレクトを適切に設定することで、SEOやユーザー体験を損なうことなく移行を行うことができる。
リダイレクトの記述方法
301リダイレクト(恒久的リダイレクト)
Redirect 301 /old-page.html https://example.com/new-page.html
302リダイレクト(一時的リダイレクト)
Redirect 302 /temporary-page.html https://example.com/temp-page.html
301リダイレクトでは、検索エンジンに対して「このページは恒久的に移動した」と通知する。
一方で、302リダイレクトでは「一時的な移動」と通知する。
ケース4.エラーページカイスタマイズ
サーバーエラーやページが見つからない場合に、ユーザーに提供するエラーページをカスタマイズする。
デフォルトの無機質なエラーメッセージを改善し、ブランドイメージの向上やユーザー離脱の防止を目的とする。
エラーページカスタマイズの記述方法
ErrorDocument 404 /custom-404.html
ErrorDocument 403 /custom-403.html
ErrorDocument 500 /custom-500.html
指定したエラーページに、HTTPステータスコードに応じて転送される。
たとえば、存在しないURLにアクセスされた場合には、404エラー用のカスタムページ(/custom-404.html)が表示される。
5..htaccess活用時の注意点
前述したように、.htaccessファイルの活用は一般的に推奨されない。
ただし、社内外の都合からどうしても使わざるを得ない場合もあるだろう。
その場合は、以下のような点に注意しよう。
注意点1.権限を持つ管理者だけが使用する
.htaccessは、非常に強力な制御を簡単に行える設定ファイルだ。
一旦許可されると、一部とはいえ任意のディレクトリに関するアクセス権限を丸々制御できてしまう。
したがって、本来はサーバー管理者の権限を持つ人物だけが使用すべきだ。
仮に複数の担当者が.htaccessを編集した場合、意図しない設定変更が原因で以下のような問題が発生するリスクがある。
- サーバーへの不要な負荷が増大し、Webサイトの読み込み速度が低下する。
- アクセス制御の設定ミスにより、本来公開すべきコンテンツが非公開になる。
- 公開すべきではないファイルが公開される。
- リダイレクト設定のミスにより、検索エンジンの評価が下がり、SEOに悪影響を与える。
特に共有サーバーやレンタルサーバーでは、設定ミスが重大な影響を及ぼす可能性があるため、慎重に運用していこう。
注意点2.ユーザー認証のみであれば「httpd.conf」で対応する
.htaccessは、ディレクトリ単位で柔軟な制御を行える点が特徴だ。
しかし、本来ならば.htaccessを使うまでもないタスクもある。
例えば、単純にユーザー認証(Basic認証など)を設定するだけであれば、httpd.confで対応したほうが安全かつ効率的だ。
また、ユーザー認証だけでなく、IP制御やリダイレクトもhttpd.confで十分な場合が多い。
.htaccessの柔軟性は非常に高いが「1サーバー、1サイト」のような単純な構成の場合は、httpd.confでの運用で十分だろう。
注意点3.root権限がある場合は使用を控える
.htaccessは、自社サーバーなどでroot権限を持つ環境では、基本的に使用を控えよう。
root権限がある場合、すべての設定をhttpd.confに統一する方法を検討しよう
以下は、httpd.confに統一した場合のメリットだ。
- サーバーの読み込み速度が向上する(.htaccessはディレクトリごとに読み込まれるため、頻繁に使用するとパフォーマンスが低下する)。
- セキュリティリスクを最小限に抑えられる(.htaccessファイルが誤って公開された場合、外部に設定内容が漏れる可能性がある)。
- 設定を一箇所で管理できるため、変更時の手間が大幅に削減される。
6.まとめ
本記事では、.htaccessの基礎知識や設置方法、記述や運用の方法について解説した。
.htaccessは適切に運用すれば非常に便利な設定ファイルであることは間違いない。
一方で、アクセス制御の不備や読み込み処理の増加によって、サイト運営に支障をきたすリスクも孕んでいる。
もし活用する場合は、テスト用のディレクトリを設けて、設定ファイルの記述を試しながら運用していこう。