WEBマーケティングをもっと身近に。
SEO対策 2023/07/20

.htaccessとは?できること・設定方法を初心者向けに解説

.htaccessとは?できること・設定方法を初心者向けに解説のサムネイル画像です

サイト担当者であれば「.htaccess」という単語を目にしたことがあると思います。しかし「.htaccessとはどのようなものなのか」「何ができるのか」「どうやって設置するのか」など、疑問に感じているのではないでしょうか?本記事では「.htaccess」について、初心者にも分かりやすく解説します。

1

.htaccessとは?

.htaccess(ドットエイチティアクセス)とは、Apache(アパッチ)及び.htaccessが制限されていないWEBサーバー用の設定ファイルです。

WEBサイトの運営においては、主に以下のような用途で利用されています。

  • リダイレクトの設定
  • BASIC認証の設定
  • IPアドレスの制限
  • 404エラーページの作成

先頭にドットが付いているので拡張子のように思われるかもしれませんが、ドットを含めた「.htaccess」がファイル名で、ファイル拡張子はありません。

「.htaccess」は隠しファイルなので、OS標準のソフトでは表示されません。

サイト運営者が.htaccessを間違って削除したり、間違った内容を記述したりすると、重要なファイルにアクセスできなくなり、サイトの更新すらできなくなる場合があるからです。

また、Apache(アパッチ)が導入されており、.htaccessが制限されていないWEBサーバーだけで.htaccessが利用できます。Apache(アパッチ)とは、WEBサーバー内でデータのやり取りをするWEBサーバーソフトのひとつです。.htaccessは、Apache(アパッチ)環境下でのみ利用できます。

Apache(アパッチ)が導入されていないWEBサーバーや対応していないWEBサーバ、Apache(アパッチ)がが導入されていても.htaccessに対応していないWEBサーバーでは、.htaccessを利用できません。

具体的に言えば、Apache(アパッチ)と同様にWEBサーバーソフトとして有名なnginx(エンジンエックス)・IIS(Internet Information Services)は、.htaccessに対応していません。

2

.htaccessでできること

.htaccessでできることは以下の4つです。

  • リダイレクトの設定
  • BASIC認証の設定
  • IPアドレスの制限
  • 404エラーページの作成

それぞれの効果や手順について解説します。

2-1

リダイレクトの設定

.htaccessでは、リダイレクトの設定ができます。リダイレクトとは、特定のページにアクセスしたユーザーを別のページへ転送する設定です。恒久的に転送する301リダイレクトと一時的に転送する302リダイレクトの2種類があります。

▼ 主に、以下のような状況でリダイレクト設定をおこないます。

  • WEBサイトを移転した場合
  • URLの正規化をおこなう場合
  • 複数のページを統合する場合
  • SSL化をおこなう場合

301・302リダイレクトについては、別記事で詳しく解説しているので興味がある方は以下ページをご確認ください。


リダイレクトを設定する場合の.htaccessの書き方は後述します。

2-2

BASIC認証の設定

.htaccessでは、BASIC認証により、ユーザー名・パスワードを伝えていないユーザーからのアクセスを制限できます。

BASIC認証とは、ディレクトリ単位でWEBサイトのページへのアクセスを簡易的に制限できる方法です。BASIC認証を設定したページにアクセスしようとしても、ユーザー名とパスワードを知っているユーザーしかページを閲覧できません。

BASIC認証は.htaccessを設置したディレクトリと下層のディレクトリすべてが対象となるため、複数のページに対してアクセスを制限する場合に便利です。

BASIC認証を設定する場合の.htaccessの書き方は後述します。

2-3

IPアドレスの制限

.htaccessでは、前述したBASIC認証と同様に、特定のIPアドレスからのアクセスを制限できます。

IPアドレスとは、パソコンやスマホ、タブレットなどの通信機器に割り当てられる番号です。
下記のように、「.」で区切られた4つの数字で構成されます。

「○○○.○○○.○○○.○○○」


.htaccessに特定のIPアドレスを記述することで、特定のIPアドレスからしかアクセスできないようにしたり、特定のIPアドレスからのアクセスだけを拒否したりすることができます。

.htaccessによるIPアドレスの制限はディレクトリ単位でおこなえるため、ディレクトリAは誰でもアクセスできるようにし、ディレクトリBでは特定のユーザーだけにアクセスを許可するといった使い方も可能です。

IPアドレスで制限をおこなう場合の.htaccessの書き方は後述します。

2-4

404エラーページの作成

404エラーページ


.htaccessでは、サイトが独自に作成した404エラーページを指定して表示させることができます。ただし、.htaccessを設置することで、上記画像のような404エラーページが自動的に生成されるわけではありません。

404エラーページとは、存在しないURLでユーザーがアクセスした場合に表示されるページです。通常の場合、「Not Found」と表示されたり、WEBサーバー側で用意されたページが表示されます。

事前に作成した404エラーページを.htaccessと同じディレクトリに保存し、.htaccessで設定することで、「Not Found」ではなくカスタム404エラーページが表示されます。

404エラーについては、別記事で詳しく解説しているので興味がある方は以下ページをご確認ください。

3

.htaccessの有効範囲

.htaccessファイルを配置した場合の有効範囲


.htaccessの有効範囲は、.htacessファイルが設置されたディレクトリ及び下層のディレクトリです。

上記の画像(左)のように最上位のhtmlフォルダ内に.htaccessを設置すると、フォルダA及びフォルダa・b内のファイル、フォルダB内のファイルに適用されます。

一方、フォルダAに.htaccessを設置した場合、フォルダa・b内のファイルには適用されますが、フォルダB内のファイルには適用されません。

また、フォルダAフォルダaの両方に.htaccessを設置した場合、フォルダaではフォルダAフォルダaの.htaccessの両方が適用されます。一方、フォルダAで適用されるのはフォルダAの.htaccessだけであり、フォルダaの.htaccessは適用されません。

4

.htaccessの設定方法

.htaccessを設定する手順は以下の通りです。

  1. .htaccessファイルを用意する
  2. .htacessファイルをサーバーにアップロード

それぞれの手順を解説します。

4-1

STEP① .htaccessファイルを用意する

.htaccessを設定するためには、.htaccessファイルを用意する必要があります。

.htaccessファイルは、メモ帳やワードパッドなどのOSに標準搭載されている無料のテキストエディタからでも作成可能です。ただし、文字コードを必ずUTF-8にしてください。

.htaccessファイルのファイル名は、「.htaccess」にする必要があります。ファイル拡張子は不要です。「.htaccess」以外のファイル名にしても動作しません。

.htaccessファイルを作成したら、目的に応じた内容を記述します。.htacessファイルの書き方は後述するので参考にしてください。

4-2

STEP② .htacessファイルをサーバーにアップロード

FTPソフトを使って用意した.htaccessファイルをサーバーにアップロードすることで、.htaccessの設定が完了します。

FTPソフトとは、ネットワーク上でファイルの転送ができるソフトウェアです。代表的なFTPソフトとして、FFFTPやCyberduck、FileZillaなどがあります。FTPソフトを利用せずに.htaccessファイルをWEBサーバーに直接保存することはできません。

5

.htacessファイルの書き方

.htacessファイルの書き方の基本と、リダイレクトの設定、BASIC認証の設定、IPアドレスの制限をおこなう場合の書き方例をご紹介します。

5-1

.htacessファイルの書き方の基本

.htacessファイルを作成・記述する際に必ず守らなければいけないことは以下の4つです。

  • .htaccessファイルのファイル名は「.htaccess」にする
  • .htaccessファイルの文字コードはBOMなしのUTF-8にする
  • .htaccessファイルの改行コードはLFにする
  • .htaccessファイルの最後の行は空白にする
5-2

リダイレクトの書き方例

URLの正規化でリダイレクトする場合の記述例

【https://www.sem-plus.com/index.html】から【https://www.sem-plus.com/】へリダイレクトする場合

【記述方法】

RewriteEngine On
RewriteCond %{THE_REQUEST} /index\.html
RewriteRule ^(.*)index\.html$ /$1 [R=301,L]

【説明】

■ RewriteEngine On
・RewriteEngineを有効化します。これは、URLの書き換えルールを使用するために必要です。

■ RewriteCond %{THE_REQUEST} /index\.html
・リクエストされたURLが/index.htmlを含む場合にマッチします。
・%{THE_REQUEST} は、クライアントからのHTTPリクエストライン(例:GET /index.html HTTP/1.1)を表します。
・/index\.html の部分が、リクエストURLに /index.html が含まれるかどうかをチェックします。(\はエスケープ文字です)

■ RewriteRule ^(.*)index\.html$ /$1 [R=301,L]
▼ 上記の条件にマッチする場合、以下のルールが適用されます。
・^(.*)index\.html$ は、リクエストURLの /index.html 部分およびそれより前の部分にマッチします。
・/$1 は、新しいURLの形式で、キャプチャされた部分(^(.*)が$1)を保持します。これは/index.htmlを取り除くことになります。
・[R=301,L] はオプションで、R=301は永続的なリダイレクトを意味し、Lはこれが最後のルールであることを示します。(それ以上のルールを処理しない)

サイト移転でドメイン全体をリダイレクトする場合の記述例

【https://sem-plus.net】から【https://sem-plus.org】へリダイレクトする場合

【記述方法】

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?sem-plus\.net$
RewriteRule ^(.*)$ https://www.sem-plus.org/$1 [R=301,L]

【説明】

■ RewriteEngine On
・RewriteEngineを有効化します。これにより、URLの書き換えルールを使用できるようになります。

■ RewriteCond %{HTTP_HOST} ^(www\.)?sem-plus\.net$
・リクエストされたホストがwww.sem-plus.netまたはsem-plus.netである場合にマッチします。
・^ は行の先頭を意味し、(www\.)? は 'www.' があってもなくてもマッチすることを意味します。

■ RewriteRule ^(.*)$ https://www.sem-plus.org/$1 [R=301,L]
▼ 上記の条件が真の場合、以下のルールが適用されます。
・^(.*)$ は、URLの任意の部分にマッチします。これは、ドメイン以降の全てのパスとクエリパラメータをキャプチャします。
・https://www.sem-plus.org/$1 は、新しいドメインにリダイレクトする際に、キャプチャしたパスとクエリパラメータを保持します。
・[R=301,L] はオプションで、R=301は永続的なリダイレクトを意味し、Lはこれが最後のルールであることを示します。(それ以上のルールを処理しない)

ページ単位でリダイレクトする場合の記述例

【https://white-link.com/sem-plus/ccc/】から【https://white-link.com/sem-plus/ddd/】へリダイレクトする場合

【記述方法】

RewriteEngine on
RewriteRule ^ccc/$ https://www.sem-plus.com/ddd/ [R=301,L]

【説明】

■ RewriteEngine On
・RewriteEngineを有効化します。これは、URLの書き換えルールを使用するために必要です。

■ RewriteRule ^ccc/$ https://www.sem-plus.com/ddd/ [R=301,L]
特定のページ (/ccc/) にアクセスした場合にリダイレクトします。
・^ccc/$ は、リクエストURLが /ccc/ で終わる場合にマッチします。
・https://www.sem-plus.com/ddd/ は、リダイレクト先の新しいURLです。
・[R=301,L] はオプションで、R=301は永続的なリダイレクトを意味し、Lはこれが最後のルールであることを示します。(それ以上のルールを処理しない)

5-3

BASIC認証の書き方例

BASIC認証の記述例

【記述方法】

AuthType Basic
AuthName “【ID・パスワード入力欄の上に表示する名前】”
AuthUserFile “.【IDとパスワードを記述した.htpasswdファイルの場所】”
require valid-user

【説明】

AuthType Basic
・認証のタイプを指定します。Basic認証はユーザー名とパスワードを求める最も基本的な認証方式です。

AuthName “【ID・パスワード入力欄の上に表示する名前】”
・認証ダイアログに表示される名前(レルム)を設定します。これはユーザーに表示され、どこに対する認証なのかを示します。

AuthUserFile “.【IDとパスワードを記述した.htpasswdファイルの場所】”
・htpasswdファイルの場所を指定します。このファイルには認証に使用するユーザー名とパスワードが記述されています。

require valid-user
・有効なユーザー(つまり.htpasswdファイルにリストされたユーザー)だけがアクセスできるようにします。



この設定により、指定した領域にアクセスしようとすると、ユーザーはユーザー名とパスワードを入力するダイアログが表示されます。これらの値は.htpasswdファイルにリストされたものと一致する必要があります。これはウェブサイトの特定の部分を保護するための簡単な方法です。

ただし、Basic認証はセキュリティが非常に弱いため、敏感なデータを保護するためには適していません。ユーザー名とパスワードはBase64でエンコードされますが、これは容易にデコード可能なため、認証情報を暗号化するためのSSL/TLSなどの追加的なセキュリティレイヤーが必要です。

5-4

IPアドレスの書き方例

Apache 2.2以前とApache 2.4以降では、アクセス制御の記述方法が異なります。両方のバージョンの記述方法を解説します。

Apache 2.4以降では、新しいRequireディレクティブを使用して、よりシンプルで直感的な記述が可能です。もし、Apacheのバージョンが2.4以降である場合、新しい記述方法を使うことをお勧めします。バージョンによっては、古い方法がサポートされなくなっている可能性もあります。

すべてのIPアドレスからのアクセスを許可する場合の記述例

【Apache 2.2以前の記述方法】

order deny,allow
allow from all

【説明】

order deny,allow
・先に"deny"ルールを評価し、その後で"allow"ルールを評価します。

allow from all
・すべてのIPアドレスからのアクセスを許可します。


【Apache 2.4以降の記述方法】

Require all granted

【説明】

Require all granted
・すべてのIPアドレスからのアクセスを許可します。

すべてのIPアドレスからのアクセスを拒否する場合の記述例

【Apache 2.2以前の記述方法】

order allow,deny
deny from all

【説明】

order allow,deny
・先に"deny"ルールを評価し、その後で"allow"ルールを評価します。

deny from all
・すべてのIPアドレスからのアクセスを拒否します。


【Apache 2.4以降の記述方法】

Require all denied

【説明】

Require all denied
・すべてのIPアドレスからのアクセスを拒否します。

IPアドレス「○○○.○○○.○○○.○○○」と「×××.×××.×××.×××」からのアクセスだけを許可する場合の記述例

【Apache 2.2以前の記述方法】

order deny,allow
deny from all
allow from ○○○.○○○.○○○.○○○
allow from ×××.×××.×××.×××

【説明】

order deny,allow
・先に"deny"ルールを評価し、その後で"allow"ルールを評価します。

deny from all
・すべてのIPアドレスからのアクセスを拒否します。

allow from ○○○.○○○.○○○.○○○
allow from ×××.×××.×××.×××
・指定されたIPアドレスからのアクセスを許可します。


【Apache 2.4以降の記述方法】

Require all denied
Require ip ○○○.○○○.○○○.○○○
Require ip ×××.×××.×××.×××

【説明】

Require all denied
・すべてのIPアドレスからのアクセスを拒否します。

Require ip ○○○.○○○.○○○.○○○
Require ip ×××.×××.×××.×××
・指定されたIPアドレスからのアクセスを許可します。

IPアドレス「○○○.○○○.○○○.○○○」と「×××.×××.×××.×××」からのアクセスだけを拒否する場合の記述例

【Apache 2.2以前の記述方法】

order allow,deny
allow from all
deny from ○○○.○○○.○○○.○○○
deny from ×××.×××.×××.×××

【説明】

order allow,deny
・先に"allow"ルールを評価し、その後で"deny"ルールを評価します。

allow from all
・すべてのIPアドレスからのアクセスを許可します。

deny from ○○○.○○○.○○○.○○○
deny from ×××.×××.×××.×××
・指定されたIPアドレスからのアクセスを拒否します。


【Apache 2.4以降の記述方法】

Require all granted
<RequireAll>
 Require all granted
 Require not ip ○○○.○○○.○○○.○○○
 Require not ip ×××.×××.×××.×××
</RequireAll>

【説明】

Require all granted
・すべてのIPアドレスからのアクセスを許可します。

<RequireAll>
  Require all granted
  Require not ip ○○○.○○○.○○○.○○○
  Require not ip ×××.×××.×××.×××
  </RequireAll>

・指定されたIPアドレスからのアクセスを拒否します。


許可・拒否するIPアドレスを増やす場合には行を追加してください。

6

「.htaccess」を設定するときの注意点

「.htaccess」を設定するときには以下の4点に注意しましょう。

  • .htaccesの設置場所に注意する
  • ファイル名の記述ミスに注意する
  • 設置場所を間違えないように注意する
  • .htaccesファイル内に日本語を使用しない

間違った設定をおこなってしまうと、記述した効果が出ないだけでなく、ユーザーがサイトへアクセスできなくなったり、サイトの運営者がページを編集できなくなったりする恐れがあります。

6-1

.htaccesの設置場所に注意する

「.htaccess」を設定するときには、.htaccesを設置する場所に注意する必要があります。なぜなら、.htaccesをどこに設置したかで、効果が適用される範囲が変わってしまうからです。

.htaccesに正しく記述していても、設置した場所が間違っていれば、記述した内容が正しく機能しない可能性があります。

例えば、フォルダAのアクセスを制限したいのに、.htaccesをフォルダBに設置した場合、フォルダBのアクセスを制限することになるでしょう。

また、.htaccesの設置場所を間違ってページがリダイレクトされていなかった場合、ユーザーをページへ誘導できなくなるだけでなく、Googleからの評価を受け継ぐことができず、検索順位が上がらない、アクセス数が低下するなどの問題が発生するかもしれません。

前述した.htaccesの有効範囲を確認し、どこに設置するべきかを確認しましょう。

6-2

ファイル名の記述ミスに注意する

「.htaccess」を設定するときには、ファイル名の記述ミスに注意する必要があります。前述したように、.htaccessに「.htaccess」以外のファイル名を付けてアップロードしてしまうと、記述した内容は無効となります。

しかし、.htaccessファイルを作成・保存する際に間違って拡張子が追加されてしまったり、正しく保存できない場合があるかもしれません。

「.htaccess」というファイル名で保存できない場合には、保存可能なファイル名で一度保存し、WEBサーバーへアップロードするタイミングでファイル名を「.htaccess」に変更しましょう。

6-3

.htaccesファイル内に日本語を使用しない

「.htaccess」を設定するときには、.htaccesファイル内に日本語を使用しないようにする必要があります。日本語で記述すると、文字化けしたりサーバーエラーが発生する恐れがあるからです。

日本語URLからリダイレクトする場合、もしくは日本語URLへリダイレクトする場合には注意しましょう。

例えば、https://white-link.com/sem-plus/リダイレクト/という日本語URLは、

https://semplus.com/%E3%83%AA%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88/

というURLにブラウザが自動的にURLエンコーディングします。そこで、以下のように日本語を使わずに記述した場合、正しくリダイレクトしません。

【https://white-link.com/sem-plus/リダイレクト/】から【https://white-link.com/sem-plus/redirect/】へリダイレクトする場合

RewriteEngine on
RewriteRule
^%E3%83%AA%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88/$
https://www.sem-plus.com/redirect/[L,R=301

上記の場合、.htaccesに記述した「%」の部分をApacheが「x」へ自動的に変換してしまうからです。「%」の部分を「\x」に変更することで、正しくリダイレクトされます。

7

.htaccesに関するよくある質問

.htaccesに関するよくある質問と回答をご紹介します。

.htaccessはどこにありますか?

.htaccessはルートディレクトリにあります。ただし、OSに標準装備されているソフトでは表示されないため、FTPソフトなどを利用して確認する必要があります。

.htaccessファイルの読み方は?

.htaccessファイルの読み方は、ドットエイチティアクセスです。

.htaccessの危険性は?

.htaccessの危険性は、外部の第三者に設置・編集を任せてしまうと、情報漏えいの恐れがあることです。

.htaccessの記述をミスするとどうなる?

.htaccessの記述をミスすると、ユーザーがサイトを閲覧できなくなったり、サイト運営者が管理画面にログインできなくなったりします。

8

まとめ

今回は、「.htaccess」の概要から用途、作成・記述・設置方法まで解説しました。

「.htaccess」はWEBサーバーを直接制御するファイルなので、間違った内容を記述して設置すると、本来の目的であるリダイレクトやBASIC認証、特定のIPアドレスからのアクセス制限などが機能しないだけでなく、サイトへアクセスできなくなる恐れもあります。

「.htaccess」の設定に不安を感じる場合には、WEBエンジニアなど専門家に任せることをおすすめします。

ホワイトリンク 記事内用バナー


この記事を書いたライター

SEO施策部

SEMを軸にSEOの施策を行うオルグロー内の一部署。 サイト構築段階からのSEO要件のチェックやコンテンツ作成やサイト設計までを一貫して行う。社内でもひときわ豊富な知見を有する。またSEO歴15年超のノウハウをSEOサービスに反映し、3,000社を超える個人事業主から中堅企業までの幅広い顧客層に向けてビジネス規模にあった施策を提供し続けている。

RECOMMENDED ARTICLES

ぜひ、読んで欲しい記事

  • XMLサイトマップとは?必要性と作り方・設定方法を解説のサムネイル画像です
    SEO対策
    2024/03/04

    XMLサイトマップとは?作り方と必要性・確認方法を解説

    2024/03/04

  • リンク切れとは?原因・対処法・対策とSEOへの影響を解説のサムネイル画像です
    SEO対策
    2024/03/04

    リンク切れとは?一括で見つける方法・原因と対策について解説

    2024/03/04

  • Googleにインデックスされない原因と対処法12選のサムネイル画像です
    SEO対策
    2024/02/20

    Googleにインデックスされない原因と対処法12選

    2024/02/20

  • サブドメインとは?サブディレクトリとの違いや使用例・目的まで徹底解説のサムネイル画像です
    SEO対策
    2024/02/15

    サブドメインとは?メリット・デメリットと作り方を分かりやすく解説

    2024/02/15

  • robots.txtとは?書き方のルール・設定方法を解説のサムネイル画像です
    SEO対策
    2024/02/14

    robots.txtとは?書き方のルール・設定方法を解説

    2024/02/14

  • 301リダイレクトとは?設定方法と.htaccessの書き方についてのサムネイル画像です
    SEO対策
    2024/02/13

    301リダイレクトとは?設定方法と.htaccessの書き方について

    2024/02/13

backtotop