.htaccessとは?リダイレクトやBasic認証などの基本的な書き方を解説

.htaccessとは?
「.htaccess(ドットエイチティアクセス)」ファイルは、Apache(アパッチ)Webサーバーで使用される設定ファイルで、特定のディレクトリに対するWebサーバーの動作を詳細に制御するために使用されます。Apacheは、世界中で広く利用されている著名なWebサーバーソフトウェアの一つです。
.htaccessファイルを利用することで、アクセス制御、リダイレクトなど、さまざまなサーバーの挙動を柔軟に指定することが可能です。通常、Apacheの設定変更はサーバー管理者のみが行えますが、.htaccessファイルを使用することで、一般ユーザーでも特定のディレクトリに関する設定を行うことができます。これにより、サーバーの動作を細かくカスタマイズすることが可能です。
.htaccessのできること・書き方
.htaccessファイルを使用することで、以下のようなさまざまな設定が可能です
- リダイレクト設定
- 特定のURLから別のURLへの転送を設定できます。
- BASIC認証(パスワード保護)
- ページにアクセスする際にパスワードを要求することができます。
- URLの正規化
- URLの表記を統一し、SEOに効果的な設定ができます。
- IP制限
- 特定のIPアドレスからのみアクセスを許可したり、特定のIPアドレスからのアクセスを拒否したりできます。
- 404ページの設置
- 404エラー(ページが見つからないエラー)が発生した際に表示するカスタムエラーページを設定できます。
リダイレクト設定
リダイレクトとは、特定のURLにアクセスした際に自動的に別のURLに転送する設定を指します。これにより、ユーザーが古いURLにアクセスした場合でも、新しいURLにスムーズに誘導されます。
例えば、サイトをリニューアルした直後は、以前のURLがまだ多くのリンクとして残っていたり、ユーザーに新しいURLが周知されていなかったりすることが多いです。リダイレクト設定を行うことで、旧URLから新URLへ自動的に誘導し、ユーザーの離脱やストレスを軽減できます。
旧ページから新ページに301リダイレクトの設定方法(同じドメイン)
Redirect 301 /old-page.html /new-page.html
この設定は、旧ページを新しいページに恒久的にリダイレクトする方法です。具体的には、ウェブサーバーのルートディレクトリから見たパスを使用し、旧ページである /old-page.html
へのアクセスを新しいページ /new-page.html
に自動的に転送します。これにより、ユーザーが旧ページのURLにアクセスした場合でも、新しいページにリダイレクトされるため、リンク切れを防ぐことができます。
旧ページから新ページに301リダイレクトの設定方法(別ドメイン)
Redirect 301 /old-page.html https://www.newdomain.com/new-page.html
この設定は、ウェブサイトのルートディレクトリにある /old-page.html
へのアクセスを新しいドメインの https://www.newdomain.com/new-page.html
にリダイレクトします。301リダイレクトは恒久的なリダイレクトであり、検索エンジンにも新しいページのURLを知らせるため、SEOにおいても有用です。
旧ドメインから新しいドメインに301リダイレクトの設定方法
RewriteEngine On
RewriteCond %{HTTP_HOST} ^old‐site\.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.old‐site\.com [NC]
RewriteRule ^(.*)$ https://new‐site.com/$1 [L,R=301,NC]
- mod_rewriteエンジンを有効にします。
- HTTPホストが
old-site.com
である場合にリダイレクトを適用します。[NC,OR]
は、大文字小文字を区別しないことと、次の条件とOR条件であることを示します。 - HTTPホストが
www.old-site.com
である場合にリダイレクトを適用します。[NC]
は、大文字小文字を区別しないことを示します。 /old-page.html
へのアクセスをhttps://www.newdomain.com/new-page.html
にリダイレクトします。[R=301,L]
は、このリダイレクトが恒久的なものであること(301リダイレクト)と、このルールが最後のルールであることを示します。
旧ディレクトリから新ディレクトリに301リダイレクトの設定方法
RewriteEngine on
RewriteRule ^old-directory(.*)$ /new-directory$1 [R=301,L]
- mod_rewriteエンジンを有効にします。これにより、以下のリダイレクトルールが適用されます。
RewriteRule
はリダイレクトルールを定義します。^old-directory(.*)$
は、URLがold-directory
で始まり、その後に任意の文字列が続く場合にマッチします。/new-directory$1
は、マッチした部分をnew-directory
に置き換えます。$1
はキャプチャされた任意の文字列部分を指します。[R=301,L]
は、リダイレクトのステータスコードを301(恒久的なリダイレクト)に設定し、このルールが最後であることを示します。
Basic認証の設定
BASIC認証は、指定したディレクトリやファイルへのアクセスをユーザー名とパスワードで制限する方法です。これにより、特定のユーザーだけがアクセスできるように保護できます。
.htpasswd ファイルを作成
- 任意のテキストエディタ(例えば、メモ帳やVS Codeなど)を開きます。
- .htpasswdファイルに以下のようにユーザー名とパスワードをハッシュ化して記述します。例えば、以下のサイトでパスワードをハッシュ化できます。
- 生成されたエントリ(例: username:$apr1$2I2K4…)を .htpasswd ファイルにコピーして保存します。ファイル名を .htpasswd として保存し、サーバーの適切な場所にアップロードします。
- ウェブルートの外に設置
- .htpasswd ファイルは、ウェブサーバーのルートディレクトリ(ウェブルート)の外に置くのが一般的です。これは、セキュリティ上の理由からで、ウェブルートの外に設置することで、インターネットから直接アクセスされるリスクを減らします。
- 例:
/home/username/.htpasswd
や/etc/httpd/.htpasswd
のような場所に設置します。 - パーミッションの変更などを行い、ウェブサーバー以外のユーザーからのアクセスを制限します。
- アクセス制限をかけれるディレクトリに設置
- ウェブルートの外に設置できない場合は .htaccess ファイルを使って、.htaccess, .htpasswd ファイルに対してIP制限やアクセス制限を指定します。
.
htaccess ファイルを作成
- 再度、任意のテキストエディタを開きます。
- 以下を参考に .htaccess ファイルに記述します
- AuthUserFile のパスを、実際にアップロードした .htpasswd ファイルのパスに変更します。
- .htaccess ファイルを保存し、保護したいディレクトリにアップロードします。
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/.htpasswd
Require valid-user
設定の確認
- ブラウザで保護したいディレクトリにアクセスし、認証ダイアログが表示されることを確認します。
- 先ほど .htpasswd ファイルに登録したユーザー名とパスワードを入力し、アクセスできることを確認します。
URLの正規化
URLの正規化とは、同じコンテンツ(ページ)に対して複数のURLが存在する場合に、検索エンジンがどのURLを評価すべきかを一つに統一することです。これにより、SEOの効果を最大化し、検索エンジンが適切にページを認識できるようにします。
例えば、「www.example.com」と「example.com」の「www」の有無を統一する方法などいくつか紹介します。
wwwなしに統一の設定方法
この設定は、wwwを含むURLをwwwなしのURLにリダイレクトします。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
- mod_rewriteエンジンを有効にします。これにより、以下のリダイレクトルールが適用されます。
- HTTPホストが “www.” で始まる場合に条件を満たします。
(.*)
はホスト名の残りの部分をキャプチャし、[NC]
は大文字小文字を区別しないことを示します。 - 任意のパスにマッチし、リダイレクト先を https:// の後にキャプチャされたドメイン部分
%1
とパス$1
を付けて構築します。[R=301,L]
は恒久的なリダイレクト(301)であることと、このルールが最後であることを示します。
wwwありに統一の設定方法
この設定は、wwwを含まないURLをwwwありのURLにリダイレクトします。
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
- mod_rewriteエンジンを有効にします。これにより、以下のリダイレクトルールが適用されます。
- HTTPホストが “www.” で始まらない場合に条件を満たします。
[NC]
は大文字小文字を区別しないことを示します。 - 任意のパスにマッチし、リダイレクト先を https://www. の後に現在のホスト名
%{HTTP_HOST}
とパス$1
を付けて構築します。[R=301,L]
は恒久的なリダイレクト(301)であることと、このルールが最後であることを示します。
index.php または index.html なしに統一の設定方法
この設定は、index.htmlやindex.phpを含むURLを、それらを含まないURLにリダイレクトします。
RewriteEngine On
RewriteCond %{THE_REQUEST} /index\.(html|php) [NC]
RewriteRule ^(.*)index\.(html|php)$ https://%{HTTP_HOST}/$1 [R=301,L]
- mod_rewriteエンジンを有効にします。これにより、以下のリダイレクトルールが適用されます。
- リクエストされたURLに index.html または index.php が含まれている場合に条件を満たします。
[NC]
は大文字小文字を区別しないことを示します。 - URLの末尾に index.html または index.php がある場合に、それを取り除いてリダイレクトします。
$1
はindex より前の部分をキャプチャします。[R=301,L]
は恒久的なリダイレクト(301)であることと、このルールが最後であることを示します。
HTTPSへの統一の設定方法
全てのHTTPリクエストをHTTPSにリダイレクトします。これにより、セキュリティが強化され、SEOにも有利です。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
- mod_rewriteエンジンを有効にします。これにより、以下のリダイレクトルールが適用されます。
- リクエストがHTTPで行われた場合に条件を満たします。つまり、HTTPSでない場合です。
- 任意のパスにマッチし、リダイレクト先を https:// の後に現在のホスト名
%{HTTP_HOST}
とリクエストされたURI%{REQUEST_URI}
を付けて構築します。[R=301,L]
は恒久的なリダイレクト(301)であることと、このルールが最後であることを示します。
IP制限
IPアドレスにはグローバルIPアドレスとプライベートIPアドレスの2種類があり、インターネットに接続されたパソコンやサーバーなどの機器に割り当てられる一意の数字です。IP制限は、特定のIPアドレスからのみサイトやページを閲覧できるように制限をかける方法です。
- グローバルIPアドレス
- 世界中で唯一のIPアドレスで、ICANN(Internet Corporation for Assigned Names and Numbers)という組織が管理しています。固定IPアドレスとも呼ばれ、IP制限を設定する際に使用できます。
- プライベートIPアドレス(ローカルIPアドレス)
- ローカルネットワーク内で使用されるIPアドレスで、家庭やオフィスのネットワーク内でのみ使用されます。重複する可能性があり、IP制限には使用できません。
IP制限は、一般公開前のサイトやページを特定のユーザーのみがアクセスできるようにして公開前の情報を保護する場合や、不特定多数のアクセスを防ぎ、信頼できる固定IPアドレスからのみアクセスを許可することでセキュリティを高めたい場合に使用されます。
サイト全体で特定のIPだけ許可をする場合
以下の例では、指定した固定IPアドレス(例:123.456.789.0)からのアクセスのみを許可し、それ以外のすべてのアクセスを拒否します。
<RequireAll>
Require all denied
Require ip 123.456.789.0
</RequireAll>
- すべての条件を満たす必要があることを指定します。条件の一つでも満たさない場合、アクセスは拒否されます。
- デフォルトで全てのアクセスを拒否します。このルールが適用される場所に対して、最初に全てのアクセスを禁止します。
- 特定のIPアドレス(この場合、例として123.456.789.0)からのアクセスのみを許可します。
特定のページに対してIP制限をかける場合
以下の例では、wp-login.phpページへのアクセスを特定の固定IPアドレス(例:123.456.789.0)からのみ許可し、それ以外のアクセスを拒否します。
<FilesMatch "wp-login.php">
Require ip 123.456.789.0 # 自社の固定IPアドレスを入力
</FilesMatch>
- wp-login.phpファイルにマッチするすべてのリクエストに対して、このセクションのルールを適用します。
- 指定されたIPアドレス(この場合、例として123.456.789.0)からのアクセスのみを許可します。
任意の404エラーページの表示
404エラーページとは、ユーザーにページが存在しないことを伝え、目的のページを見つける方法を提案するエラーページです。任意の404ページを作成し、ウェブサイトのルートディレクトリに設置することをお忘れなく。
カスタム404エラーページを作成
- テキストエディタを開き、カスタム404エラーページを作成します。ファイル名を 404.html とします。
- 作成した 404.html ファイルをウェブサーバーのルートディレクトリにアップロードします。
.htaccess ファイルを設定
- テキストエディタで .htaccess ファイルを開き、以下の行を追加します
ErrorDocument 404 /404.html
- 保存したら、完了です。
.htaccessの設置方法と注意点
.htaccessファイルを使用するには、設定したいディレクトリに.htaccessファイルをアップロードします。このファイルは、そのディレクトリだけでなく、そこに含まれるすべてのサブディレクトリにも適用されます。
.htaccessファイルの内容や設置場所を間違えると、サイトが正しく表示されなくなることがあります。しかし、修正は可能です。もしサイトが表示されなくなった場合は、記述内容や設置場所を確認し、修正しましょう。
RewriteEngine On
はファイルの先頭に一度記述するだけで十分です。重複して記述する必要はありません。RewriteRule
で正規表現を使用する際、適切にエスケープすることを忘れないでください。例えば、ドット.
は\.
と書く必要があります。- リダイレクトをテストする際には、ブラウザのキャッシュをクリアして最新の設定が反映されることを確認します。
まとめ
.htaccessファイルは、Apacheサーバー上でディレクトリごとの設定を制御できる便利なツールです。その使用にはいくつかの注意点がありますが、適切に設定することで様々な効果を発揮します。
必要に応じて.htaccessファイルを使用する場合、まず対応するWebサーバーソフトウェアが設定されていることが条件です。.htaccessファイルを作成し、制御したいディレクトリにアップロードすることで、その設定が有効になります。
.htaccessを活用することで、サイトの運営を効率化し、ユーザーエクスペリエンスを向上させることが可能です。セキュリティ対策を含めた適切な設定を行うことで、安全で効果的なウェブサイト管理を実現しましょう。