.htaccessファイルの作り方と
サイト運営に役立つ設定まとめ
「.htaccess」ファイルは、ウェブサーバーの動作制御ファイルです。
「.htaccess」ファイルを使うと、ブラウザに表示したくないファイルを非表示にしたり、ページのURLが変わったときに新しいURLに自動転送する、といった動作を簡単に実装する事ができます。
自分のサイトを公開する際にレンタルサーバーを利用している方も多いと思います。
中には「.htaccess」は利用不可のサーバーもありますが、最近のレンタルサーバーの多くは利用可能となっています。
ここでは、サイト運営に役立つ「.htaccess」ファイルの作り方から、覚えておくと便利な設定の書き方をまとめてみました。
.htaccessファイルの基本ルール
「.htaccess」ファイルは、必ず「.htaccess」という名前にする必要があります。
Windowsなどのエクスプローラーでは、先頭に「.」のつくファイル名は作成できず、Macなどでは「隠しファイル」扱いとなって見えなくなる場合もあります。
まずはテキストエディタで空ファイルを作成して「.htaccess」という名前で保存するか、「htaccess」という名前で保存しておき、サーバーにUPした時にリネーム(名前を変更)すればOKです。
メモ帳で作成すると文字コードなどが自動で付与されてエラーになる事があるので、必ずテキストエディタで作成します。
文字コードは「UTF-8(BOM無し)」。
改行コードは「LF」または「CR+LF(Windows)」で保存します。
「CR」としてしまうとエラーになるので注意しましょう。
また、「.htaccess」ファイルの中身については、エラーを防ぐために最終行は改行して空行にします。
テキストエディタでは、ファイルの最終行にマークがつくものがあるので例にすると……。
Redirect 301 a.html https://ドメイン.com/b.html
[ EOF ]
といったように、最終行は「改行」して、空行としておきましょう。
また、コメントアウトさせたい時は、コメント行の先頭に「#」をつけます。半角文字である点に注意しましょう。
#コメントアウト
「#」から始まった行はスルーされるので、どんな動作の指定なのかを日本語でメモっておく事ができて便利です!
行の途中でコメントアウトするとエラーになる事があるので、コメントアウトは基本的に「行単位」で使うようにしましょう。
.htaccessで
ファイル一覧を表示しない
「index.html/index.php」といったファイルが存在しないフォルダで、存在しないページにアクセスがあると、ブラウザ上でファイル一覧が表示されてしまう事があります。
サーバー上にUPされているファイルを一覧できてしまうため、セキュリティ上よろしくありません。
ファイル一覧が表示されないように、「index.html/index.php」の存在しないフォルダで存在しないページにアクセスがあった場合は、404エラーページが表示されるように設定します。
#indexなしでもファイル一覧を表示しない
DirectoryIndex index.html index.php 404.php .ht
.htaccessで
ファイルを非表示にする
ブラウザ上で表示されると困る設定ファイルなどにアクセスがあった場合、非表示にする(表示しない)ための設定です。
以前は「.htaccess」や「.ftpaccess」といった設定ファイルは、自分で非表示指定しておく事が多かったですが……
現在は、レンタルサーバー側で、最初から非表示になるように設定してある事も多いようです。
#.htaccessのブラウザでの閲覧拒否
<FilesMatch ".htaccess">
Order deny,allow
Deny from all
</FilesMatch>
#.ftpaccessのブラウザでの閲覧拒否
<FilesMatch ".ftpaccess">
Order deny,allow
Deny from all
</FilesMatch>
.htaccessで
オリジナル404ページを表示する
存在しないURLにアクセスがあると404エラーとなり、指定の404ページが表示されます。
通常は利用しているレンタルサーバーの用意した404ページが表示されますが、何もない場合は「Not Found」などのエラー表示が出てきます。
この404エラーが出た時に、自分で作った404ページ(ここでは404.html)を表示したい場合の設定です。
ErrorDocument 404 /404.html
細かい部分ですが、404ページは単なるエラーページを表示するより、情報を探しやすい工夫をする事で記事を読んでもらう機会に繋がります。
余裕があれば、ぜひオリジナルの404ページを作ってみましょう。
.htaccessで
301リダイレクトする
ページのURLを変更する時に覚えておきたい設定です。
公開しているページファイルの名前や拡張子を変更したり、格納フォルダを変更したりすると、ページURLも変わります。
新しいURLで検索に表示されるまでには時間がかかり、それまでは古いURLが表示されるので、アクセスがあっても404エラーになってしまいます。
そこで、古いページにアクセスがあった時に、新しいページに移動する「リダイレクト」設定をしておきます。
Redirect 301 古いページ.html https://ドメイン.com/新しいページ.html
せっかく興味を持ってくれたユーザーを迷子にせずに、検索エンジンからのページ評価も引き継ぐ事ができます。
.htaccessで
URLを統一する
インターネットでは、1つのページにアクセスする時、URL先頭に「www」をつけた場合でも、「www」がない場合でも、同じページにアクセスできます。
トップページにしても、「sample.com」「sample.com/index.html」といったURLでは、どちらも同じページにアクセスできます。
こういったURL割れがあると、解析データの正確性が落ちたり、検索エンジンからの評価もURLごとに分散されてしまうため、できるだけ1つのページを1つのURLに統一した方がよいとされています。
URL正規化、ホスト名の統一といったものです。
「www」「/index.html」の有無を指定したり、サイトをSSL化している場合にSSL化されていないURLでアクセスがあった際に、SSL化されているページに自動転送させる事もできます。
RewriteEngine On
#常時SSL通信
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
#index.htmlなしで統一
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ https://ドメイン.com/$1 [R=301,L]
#wwwなしで統一
RewriteCond %{HTTP_HOST} ^www.ドメイン.com [NC]
RewriteRule ^(.*)$ https://ドメイン.com/$1 [R=301,L]
上記は「常時SSL通信」「index.htmlなし」「wwwなし」といったURLで統一している例です(RewriteEngine On必須)。
「wwwあり」で統一する書き方とコードの解説、トップページを「/index.htmlあり」で統一する方法は、こちらでまとめています。
.htaccessで
HTMLファイルでPHPを動かす
こちらは、HTMLファイルでPHPを動かすための記述です。
すでに公開しているHTMLページでPHPを使いたくなった時に便利です。
通常、HTMLファイルではPHPファイルは動きませんが、「.htaccess」でHTMLファイルをPHPファイルとして扱う設定をする事で、PHPを稼働させる事ができます。
ファイルの拡張子を変更せずにすむので手軽です。
#HTMLファイルでPHPを動かす
<FilesMatch "\.html$">
AddHandler php7-script .html
</FilesMatch>
使いたいPHPのバージョンに応じて、「php7」の部分を的確変更してくださいね。
.htaccessファイル余談
「.htaccess」ファイルを活用すると、ページのリダイレクトや正規URL化なども簡単に実装する事ができます。
ただし、記述ミスなどでエラーになると、サイトが丸ごと表示されなくなったりするリスクもあるので、できるだけテスト環境で動作チェックをしてから、本番のウェブサーバーにアップロードすると安心です。
テスト環境は、XAMPPなどでの仮想サーバーソフトをダウンロードして、ローカルPC上にテスト環境を構築するのがおすすめ。
ローカル環境では確認できない作業の場合は、無料で借りられるレンタルサーバーや、普段使っていない独自ドメインサイトなども活用できます。
テスト環境で万全の作りであっても、本番環境で意図しない挙動になる事もあるので、新しい設定を加えた時などは、必ずアップロード後に動作を確認してみましょう。