.htaccessとは?活用方法と記述ルール、SEOへの影響
.htaccessとは、Apache HTTP Server(アパッチ)というWEBサーバーソフトで利用される設定ファイルで、ウェブサイトの動きやアクセスを管理するためのツールです。ドット・エイチ・ティ・アクセスと読みます。このファイルを使うことで、ディレクトリ単位でのアクセス制御、特定ページへのアクセス制限、リダイレクト設定、URLの正規化、BASIC認証、IP制限、カスタム404ページ設定など、多岐にわたる管理が可能です。
![amano_portrait](https://www.switchitmaker2.com/wordpress/wp-content/uploads/2024/05/amano_portrait-150x150.webp)
.htaccessとは
.htaccess(ドットエイチティアクセス)とは、Apache HTTP Server(アパッチ)というWEBサーバー構築ソフトを利用しているWEBサーバーの動きやアクセスを管理できる設定ファイルのことです。ディレクトリ単位でのアクセス制御や特定のページへのアクセス制限などを行う際に利用され、後述する記述ルールを守ったテキストファイルを作りFTPソフトでサーバーにアップするだけで簡単に設定できます。
※.htaccessは単にエイチティアクセスと呼ばれることもあります。
WEBサーバーにはWindowsで利用されるIISというソフトもありますが、元々WEBサーバーはUNIXやLinuxで使われることが多く、UNIX系のソフトであるApacheがシェアの大部分を占めます。現在ではWindowsでもApacheを使うことができるため、ほとんどのWEBサーバーはApacheを利用しているので、.htaccessはほとんどのWEBサーバーで使うことができますが、記述ルールが特殊であるため、表記ミスによりサイトがダウンすることもあり、慎重な運用が求められます。
※Windowsでは.(ドット)は通常、拡張子に使われますが、.htaccessは拡張子ではなく、UNIX系のOSではファイルの頭に.(ドット)が付くことで隠しファイルとなり、通常は見えないファイルとなります。設定ファイルであるため、普段から変更する必要はなく、設定を間違えてしまうことでサイトへ大きな影響が出ることから隠しファイルとなっています。
.htaccessの利用環境
.htacceesが利用できるかどうかはWEBサーバーにApacheを使っているかどうかと、Apacheが使われている場合にサーバー側の設定で.htaccessが使えるようになっているかどうかで決まります。
.htaccessというファイルはApacheというソフトの設定ファイルですので、IISのようなソフトが使われている場合には.htaccessというファイルは存在しません。また、Apacheを使っていた場合であってもレンタルサーバーやレンタルCMSでは使用できないように制限されていることもあります。
アクセス制御という観点では後述するhttpd.confを設定することでも実現できますが、こちらにも利用制限がかかっていることがあり、WordPressを使っている場合には.htaccessを使わずにプラグインでアクセスを制御するということもできます。
.htaccessの有効範囲
.htaccessは通常はサイトのTOPに配置しますが、ディレクトリ単位で設定することも可能です。TOPに設置した場合はサイト全体に作用しますが、特定のディレクトリに配置した場合には、その下層ページすべてに適用されるため、複数の.htaccessを使い分けることで特定のディレクトリのみパスワードをかける、閲覧できないようにするというような利用が可能です。
.htaccessでできること
リダイレクトやURL正規化に使われることの多い.htaccessでは簡易パスワード設定やIP制限のような機能もあります。機能としては大きく次の7つに分類されます。
リダイレクト設定
リダイレクトとは、ユーザーが特定のディレクトリやページにアクセスした際に指定したページに転送することです。シーズンオフのときにページを一時的に非表示にしたり、リニューアルやURL構成の変更などでサイト構成が変わったときに利用されます。
リダイレクトには恒久的な転送である301リダイレクトと一時的な転送である302リダイレクトがあり、利用用途によって設定することで元のページ評価を正しく転送先に設定することが可能になり、SEO効果が見込めます。
URLの正規化
URLの正規化とは、同じページが複数のURLで存在する場合に検索エンジンに同一のページであると宣言することで評価が分散することを防ぐことです。
例えば、次の4つのURLは同じページを表していますが、wwwの有無やindex.htmlの有無によって表記方法が変わります。
- https://www.switchitmaker2.com/
- https://switchitmaker2.com/
- https://www.switchitmaker2.com/index.html
- https://switchitmaker2.com/index.html
URLの正規化を行うことで上記4つのページを1つのページとして検索エンジンに宣言することができるようになるため、ページ評価が4つに分けられてしまうことを防げます。URLの正規化には上記以外にもSSL化(httpかhttpsか)やパラメータの付与などの際にも利用できます。
ただし、近年ではWordPressのようなCMSでサイト制作することが多く、WordPressによって自動的にURL正規化がされることも多いため、サイト構築と同時に正規化ができているのが一般的です。
BASIC認証
BASIC認証(ベーシック認証)とはWEBサイトの全てまたは一部にパスワードをかけてアクセス制限を行うものです。BASIC認証をかけることで閲覧のためにユーザー名とパスワードが必要になるため、特定のユーザーにだけ見せたい場合や公開前の試験環境などをサーバーにアップする際や管理画面にアクセスできないようにするために利用できます。
ただし、BASIC認証は簡易パスワード認証であり、安全性が高い手法ではありませんので、機密情報をWEBサーバーで公開する場合にはBASIC認証以外の手法で安全性を確保する必要があります。
IP制限
IP制限はIPアドレスを元に特定のIPアドレス以外からのアクセスを制限する場合に利用されます。例えば、日本向けサービスに対して海外からの制限を防ぎたい場合やセキュリティの関係で海外からのボットのアクセスを防ぎたいというような場合、社内からの閲覧に限定したい場合などに利用されます。
IP制限とBASIC認証はどちらもアクセス制限をかける手法ですが、BASIC認証はユーザー名とパスワードで閲覧制限をかけるのに対し、IP制限はどこからのアクセスかに対して制限をかけるという点で異なります。
カスタム404ページの設定
WEBサイトから削除したページへアクセスした場合やリンク先がおかしくなっていて存在しないページにアクセスした場合には、404ページ(存在しないページに対するエラーページ)が表示されます。
しかし、デフォルトの404ページはエラーメッセージが表示されるだけであり、クリックできる箇所もないためユーザーの離脱につながります。そのため、自社サイトオリジナルの404ページを作って導線を残したり、特定のページに転送するために.htaccessが利用されます。
拡張子単位でのアクセス制限
.htaccessはファイルの拡張子単位でのアクセス制限も可能です。WEBサイトは通常はhtml形式で作られますが、ホワイトペーパーをPDFで公開したり、データをエクセルで公開することがあります。しかし、特定のファイルタイプに対して意図せずにアクセス可能になることを防ぐためには次のように拡張子を指定してアクセスを拒否することが可能です。
<Files ~ “\.pdf$”>
deny from all
</Files>
ファイル一覧の表示制限
WordPressのようなCMSを利用したWEBサイトではディレクトリにアクセスした際にディレクトリ内のファイル一覧が表示されるということはありませんが、コーダーがゼロから作成したサイトである場合やindexファイルがない場合には、ディレクトにアクセスした際にファイル一覧の閲覧ができてしまいます。そのため、.htaccessを使って、次のような1行を追加することでディレクトリ一覧のファイル表示を拒否することが可能です。
Options -Indexes
.htacessの表記ルール
.htaccessは便利なツールではありますが、表記方法を誤るとサイト全体の閲覧ができなくなるというリスクを持ったファイルです。そのため、設定や公開にあたっては専門の担当者を置くことを強く推奨いたします。表記ルールを十分に覚えていたとしても、公開後にサイトの閲覧ができるかどうかは必ずチェックするようにしてください。
そのうえで、担当者が.htaccessを書き換える場合には次のような点に気をつけてください。
- テキストエディタで作成する
- 改行コードはLF
- 保存する際の文字コードはUTF-8
- 最後の行は空白にする(改行する)
- ファイル名は.htaccessで固定する
- コメントには行の先頭に#(シャープ)を使う
Windowsではメモ帳で作成することもできますが、文字コードがUTF-8以外になる場合や改行コードがLF(ラインフィード)にならないことがあるため推奨はできません。
※改行コードについて、メモ帳の規定値であるCR+LF(キャリッジリターン+ラインフィード)でも利用はできますが推奨ではありません。
URLの正規化を行う場合
URLの正規化には大きくwwwの有無、indexファイルの有無、httpsかどうかの3つの観点で設定することが通常です。ただし、WordPressのようなCMSを利用している場合には最初から設定されていますので、必要に応じて書き換えてください。
※xxx.comの部分を自社サイトのドメインに書き換えてください。
wwwなしに統一する記述方法
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.xxx\.com$
RewriteRule ^(.*)$ http://xxx.com/$1 [R=301,L]
index.htmlなしに統一する記述方法
RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://xxx.com/$1 [R=301,L]
httpsに統一する記述方法
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
リダイレクトを行う場合の記述方法
以下はxxx.comからyyy.comに恒久的転送(301リダイレクト)する際の記述方法です。一時的な転送(302リダイレクト)を行う場合は301を302に書き換えてください。
RewriteEngine On
RewriteCond %{http_host} ^xxx.com
RewriteRule ^(.*) https://yyy.com/$1 [R=301,L]
BASIC認証の書き方の例
BASIC認証を導入する際の.htaccessの記述は次のように行います。
AuthType Basic
AuthName “Please enter your ID and password”
AuthUserFile /ファイルパス/.htpasswd
require valid-user
ただし、/ファイルパス/.htpasswd の部分は.htpasswdを設置するディレクトリのフルパスが必要であり、レンタルサーバーによって表記方法が大きく変わりますので注意が必要です。phpの知識がある場合にはメモ帳に次のような記述をしてサイトにアップすることでフルパスが確認できます。
<?php echo __FILE__; ?>
※ /home/ドメイン名/ディレクトリ名/.htpasswd でできることもありますが、サーバーによっては動作しないことがあります。
同時に.htpasswd というファイルに「ユーザーID:パスワード」という形式の1行を記入してサーバーにアップする必要がありますが、パスワードは暗号化することが必須です。パスワードの暗号化ツールなどを使って安全性を確保するようにしてください。
IP制限
IP制限をする場合、次のような4つのパターンがあります。
- すべてのアクセスを許可する
- すべてのアクセスを拒否する
- 特定のIPアドレスのみ許可する
- 特定のIPアドレスのみ拒否する
※Apache2.2以前とApache2.4以降で表記ルールが異なります。
すべてのアクセスを許可する
すべてのIPアドレスからのアクセスを許可するため、表記する必要はありません。他との差異を確認するための表記方法です。
Apache 2.2以前 | Apache 2.4以降 |
order deny,allow
allow from all |
Require all granted |
すべてのアクセスを拒否する
すべてのIPアドレスからのアクセスを拒否するため、通常は使われることのない表記方法です。
Apache 2.2以前 | Apache 2.4以降 |
order allow,deny
deny from all |
Require all denied |
特定のIPアドレスのみ許可する
上から命令文が記述されますので、一度すべてを拒否した後に(deny from all、all denied)、特定のIPアドレスを許可するという書き方をします。特定のユーザーにだけ限定したページを作成する場合や試験環境で一般公開していない場合などに利用される表記方法です。
Apache 2.2以前 | Apache 2.4以降 |
order deny,allow
deny from all allow from ×××.×××.×××.××× |
Require all denied
Require ip ×××.×××.×××.×××
|
特定のIPアドレスのみ拒否する
一度すべてを許可した後に(allow from all、all granted)、特定のIPアドレスだけを拒否するという書き方をします。海外からのアクセスを防ぐ場合や攻撃が疑われるIPアドレスを拒否するというような使い方がされます。
Apache 2.2以前 | Apache 2.4以降 |
order allow,deny
allow from all deny from ×××.×××.×××.××× |
Require all granted
Require not ip ×××.×××.×××.××× |
.htaccessを設定するときの注意点
.htaccessはほとんどのサイトで利用されていますが、通常は初期設定のままでも利用可能です。書き換え方を誤るとサイトが閲覧できなくなることがあることから、作業には慎重さが求められます。
よくある間違いとしてはファイル名や設置場所、記述ルールのいずれかに誤りがあることです。非常に重要度の高い設定ファイルですので、可能な限り知識の持った人による作業を徹底し、設定変更後は動作確認をすることを強く推奨します。
ファイル名は.htaccessで固定
ファイル名は「.htaccess」で固定する必要がありますが、windowsでテキストファイルを使った場合には自動的に.txtのような拡張子が入ることがあります。.htaccess.txtのように拡張子が入ってもダメですし、htaccessのように頭の.(ドット)がないものもダメです。
サーバーにアップする前、アップした後でファイル名を確認することが必要ですが、頭に.(ドット)が付くことでFTPファイルで隠しファイルと認識されてしまい、設定を変更しないと見えないことがありますので注意が必要です。
.htaccessファイルの設置場所
.htaccessの影響範囲は設置したディレクトリとその下層ディレクトリすべてです。そのため、設置するディレクトリを間違えると想定していない動きをすることがあります。アップロードの際にどこにアップするのかを確認することも必要ですが、アップした後の動作確認も必須です。
.htaccesファイル内の全角表記はNG
.htaccessの表記はすべて半角英数で行う必要があります。例外としてコメント行(頭に#のついている行)は全角が使えますが、記述ルールとしては全角は認められていません。
特にURLで「https://xxx.com/サンプルページ」というようなものがあった場合、ブラウザは自動的に「https://xxx.com/%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%9A%E3%83%BC%E3%82%B8」というようなエンコードを行うため、こちらを使う必要があります。
※そもそもURLに日本語を使うことは推奨されませんが、URLに日本語が使われる場合にはブラウザのURLをコピーしてテキストエディタに貼り付けてください。
.htaccessとSEO対策
.htaccessはWEBサイトの制御のために使われる設定ファイルですが、アクセスを制御するという観点ではSEO対策に利用されることがあります。特にURLの正規化による評価分散を避ける手法やリダイレクトによるサイト評価の受け渡しはSEO担当者としては必須の知識です。また、レスポンスが早いほどサイト評価が高いという観点では.htaccessの代わりにhttpd.confを使うという選択肢もあります。
URLの正規化による評価分散の防止
前述したように、ページとしては同じであってもURLが複数存在するということは日常的に起こりえます。このときにURLの正規化を行うことで検索エンジンに対して同一ページであることを宣言できるので、サイト評価が分散されてしまうことを防ぐことができます。
ただし、WordPressのようなCMSを使う場合には最初からURLの正規化がされています。そのうえでさらに変更をしてしまうと逆に評価が下がることがありますので、変更の際には正しい知識を持った人による確認をしてください。
リダイレクトによるサイト評価の受け渡し
特にサイトリニューアル時にはサイト構成やURLが変更になるということは頻発します。このときにリダイレクトを正しく行うことでサイト評価をほぼそのまま受け継ぐことが可能です。リダイレクトをしないことでサイト評価が下がる、検索順位が下がる、アクセスが下がるなどのリニューアルによる弊害が起こりえますので十分に注意するポイントです。
httpd.confの利用
.htaccessはアクセス制御を行うという点で便利ですが、リクエストの度に各ディレクトリで.htaccessを参照するため、余計な処理が増えることになります。通常はそこまで影響しませんが、アクセスが多い場合や複雑な処理をしている場合にはサーバーの応答速度に影響する可能性があるため、httpd.confという別の設定ファイルを使うことがあります。
.htaccessで行う設定はすべてhttpd.confでも実現可能ですが、レンタルサーバーではhttpd.confへのアクセスができない場合もあるため、サーバー状況によって使い分けることになります。
まとめ
![amano_portrait](https://www.switchitmaker2.com/wordpress/wp-content/uploads/2024/05/amano_portrait-150x150.webp)