目次

この記事の目次です。

1. htaccessとは
2. htaccessの読み方
3. htaccessの作成方法
4. htaccessの置き場所
5. htaccessの書き方
6. リダイレクトの書き方
7. アクセス制限、BASIC認証の書き方
8. PHPの設定の書き方
9. WordPress(ワードプレス)のどこにあるか
10. レスポンスボディの書換え
11. htaccessの変更(書き換え内容)が反映されない場合

更新履歴

1. htaccessとは

.htaccessとは、Apache HTTP Server(httpd)を用いたWebサーバの設定ファイルです。 ディレクトリ(フォルダ)単位で設置および設定が行えます。

2. htaccessの読み方

.htaccessの読み方は「ドットエイチティーアクセス」、「ドット」を省略して「エイチティアクセス」と読む場合こともあります。

3. htaccessの作成方法

.htaccessの作成方法について説明します。

Windowsのメモ帳での作成方法

Windowsに標準搭載されている「notepad(メモ帳)」での作成方法を見ていきます。

.htaccessファイルが表示できるように設定する

はじめに.htaccessファイルが表示できるようにエクスプローラーの設定を行います。

隠しファイルを表示する

「コントロールパネル>表示方法:小さいアイコン」より、「エクスプローラーのオプション」を表示して、「表示」タブの「隠しファイル、隠しフォルダー、および隠しドライブを表示する」にチェックを入れます。

隠しファイルを表示する
拡張子を表示する

「コントロールパネル>表示方法:小さいアイコン」より、「エクスプローラーのオプション」を表示して、「表示」タブの「登録されている拡張子は表示しない」のチェックを外します

拡張子を表示する

Windowsのnotepadで作成する

Windowsの「notepad(メモ帳)」で.htaccessファイルを作成します。

notepadの起動方法

notepadはWindowsの左下のマークを右クリックして「ファイル名を指定して実行(R)」から「notepad」と入力して「OK」することで起動できます。

Windowsの左下のマークを右クリック
「notepad」と入力して「OK」
notepad(メモ帳)
「.htaccess」保存

保存方法は「ファイル(F)」から「名前を付けて保存」を選んで、「ファイルの種類(T)」で「すべてのファイル(*.*)」を選んで「.htaccess」のように「.」から始まるファイル名で、保存します。 「文字コード(E)」は「UTF-8」を選んでおくとこの先トラブルが少ないと思います。

「.htaccess」保存

4. htaccessの置き場所

httpd.confという主設定ファイルはApache HTTP Server起動時に読み込ませた場所に配置する必要があります。 それに対して.htaccessは、ディレクトリ(フォルダ)毎に配置して設定を変更できるようにする設定ファイルです。 このことから.htaccessは、分散設定ファイルともいわれています。

Apache

Apacheは、本来はApache HTTP Serverを作っているApacheソフトウェア財団のことをApacheというべきですが、 単にApacheというと、Apache HTTP Serverのことを指すことが多いです。

Apache HTTP Server

Apache HTTP Serverは、主にウェブページを公開するために必要なHTTPサービスを提供するソフトウェアです。 このようなソフトウェアのことをWebサーバーといいます。 実行形式プログラムは、httpdで、1995年にリリースされ、現在では2.4.Xとなっています。

Apacheの設定ファイル

デフォルトでは、httpd.confが主設定ファイルで、httpd.confのIncludeディレクティブで指定した設定ファイルが利用できます。 また、AllowOverrideディレクティブにAllを指定した場合、.htaccessが利用できます。

ディレクティブを記述したファイル

Apache HTTP Serverに対しての指示1つ1つをディレクティブといいます。 .htaccessもhttpd.confと同様にディレクティブの書かれたファイルになります。

ディレクティブの適用のされ方

.htaccessをディレクトリに置くことで、そのディレクトリとそのサブディレクトリすべてにディレクティブを適用させることができます。 上位のディレクトリの主設定ファイルや.htaccessファイルの設定は、下位のディレクトリの.htaccessファイルの設定で上書きされます。 上位の設定を上書きすることを考慮して.htaccessファイルを記述する必要がある点が重要なポイントです。

5. htaccessの書き方

.htaccessは「.htaccess」という名前のファイルにApache HTTP Serverの制御を行う記述を書きます。 .htaccessで使用できる文法に従って1行に1命令という形式のディレクティブを記述します。

コメント

行の初めに「#」を記述するとコメントとして扱われ設定が無効になります。

レスポンスボディの書換え

.htaccessでレスポンスボディ(HTMLやCSS、JavaScriptなどの記述内容)の書換えが行えます。

mod_substitute

ページ書換えには、mod_substituteを使用します。

URL置き換えの例

例えば、以下のようなHTMLコードを記述したページがあるとします。

<!DOCTYPE html>
<html>
<head>
<title>ページタイトル</title>
</head>
<body>
<a href="https://www.htaccess-support.com">リンク</a>
</body>
</html>

これを以下のような.htaccessの記述でwww.htaccess-support.comのドメインをhtaccess-support.comに置き換えることができます。

AddOutputFilterByType SUBSTITUTE text/html
Substitute "s/www\.htaccess-support\.com/htaccess-support\.com/i"

6. リダイレクトの書き方

.htaccessでは、Redirect、RedirectMatch、mod_rewriteのいずれかでリダイレクト設定が行えます。

Redirectディレクティブ

AにアクセスしたらBにリダイレクトというように単純なリダイレクトはRedirectディレクティブで行えます。

Redirect permanent /aaa.html https://www.bbb.com/bbb.html

RedirectMatchディレクティブ

Apache HTTP Serverでは、より複雑な書き換えのために、 RedirectMatchディレクティブを提供しています。

以下は、Aサイトへの全てのリクエストを恒久的な301リダイレクトでBサイトのページにリダイレクトする場合の例です。

RedirectMatch permanent .* https://www.bbb.com/bbb.html

注意点としては、同じサイトのページへのリダイレクトの場合はループしてしまうため上記は使えません。 同じサイトのページへ全てリダイレクトする場合はmod_rewriteを使用する必要があります。

mod_rewriteで高度なリダイレクトを行う

複雑な条件で高度なリダイレクトを行う場合はmod_rewriteの機能を使います。

mod_rewriteは、ブラウザの種類、リクエスト元のIPアドレスなどのリクエストの特徴を 使って送り返すコンテンツの場所を決めます。 さらに、mod_rewriteは外部のデータベースファイルやプログラムを使ってリクエストの扱い方を 決めることもできます

RewriteEngine on
RewriteRule ^<アクセスファイル>$ <リダイレクトURL> [L,R=301]

参考)リダイレクト

htaccessでリダイレクトが行えます。 正規表現やパラメータ付きURLの設定など、.htaccessでのリダイレクトについて解説しています。

詳細

7. アクセス制限、BASIC認証の書き方

例えば、WordPressを構築中にセットアップ画面にアクセスされた場合、乗っ取りにあってしまう恐れがあります。 また、クローラに巡回され検索エンジンに工事中のコンテンツが表示されると問題になることがあります。

.htaccessを使ったアクセス制限

.htaccessを使ったアクセス制限は、HTTPサーバー経由でのアクセスを制限します。 ファイルシステムのパーミッションと異なりますので、プログラム(CGIスクリプト)からの直接のアクセスには影響しません。

バックアップやデータ、ログファイルなどのアクセス制限

バックアップやデータ、ログファイルなどのアクセス制限を.htaccessで行っているのを見かけることがありますが、 そういったファイルやディレクトリは、出来るだけHTTPサーバ―経由でアクセスできる公開ディレクトリに配置しないようにしましょう。 public_htmlが公開ディレクトリでしたら、public_html以外のディレクトリに配置し、ファイルシステムのパーミッションを適切に設定しましょう。

BASIC認証によるアクセス制限

工事中のコンテンツなどに設定するアクセス制限の方法の1つにBASIC認証があります。

BASIC認証は、ベーシック認証や基本認証とも呼ばれる、Webサーバで設定が行えるID/パスワードの入力ダイアログを表示して行う認証です。

.htaccessでの設定例

.htaccessでの設定例は以下です。「.htpassword」のようなファイル名の認証ファイルを指定します。

AuthUserFile <パス>/.htpassword
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user

認証ファイル「.htpassword」の作成方法

認証ファイルは「htpasswd」コマンドで作成が行えます。 SSHなどでWebサーバのターミナルに接続して「htpasswd」コマンドが利用できます。

htpasswd -c -b .htpasswd <ユーザ名> <パスワード>

上記コマンドで生成された「.htpasswd」ファイルを任意の場所に配置して、AuthUserFileにパスを設定します。

IPアドレスによるアクセス制限

.htaccessでIPによるアクセス制限も行えます。 Apache 2.4からはRequireディレクティブを使用します。

Apache 2.2
order deny,allow
deny from all
allow from <許可するIPアドレス>
Apache 2.4
Require all denied
Require ip <許可するIPアドレス>

8. PHPの設定の書き方

PHPの設定にもよりますが、.htaccessでもPHPの設定が行えます。

PHPのバージョン設定

PHPのバージョン設定の.htaccessで設定する場合があります。

CPIサーバの例

CPIサーバの共用プランでは、以下のように.htaccessに記述してPHPのバージョン設定が行えます。

AddHandler x-httpd-php71 .php

「.html」の拡張子のファイルでPHPを実行する方法

「.html」の拡張子のファイルでPHPを実行する場合は、以下の設定を「.htaccess」に記述します。

AddType application/x-httpd-php .php .html

PHPの実行タイムアウト(max_execution_time)

PHPの処理が長くなり、実行タイムアウトとなってしまうことがあります。 この場合、max_execution_timeを設定することでエラーを回避することができます。

php.iniで設定するのが一般的ですが、htaccessでも設定が行えます。

php_value ignore_user_abort On
php_value max_execution_time 120

デフォルトは60秒です。上記は120秒に設定する例になります。

エラー情報の出力(display_errors)

制作時にブラウザにエラー情報が表示すると便利です。display_errorsで制御が可能です。 ただし、公開時はブラウザにPHPのエラー情報が表示されるとエラーに含まれるパス情報からサーバのアカウント名の露呈など重要な情報が取得されてしまう場合があります。

.htaccessでの設定例は以下です。

php_flag display_errors Off

参考)PHP設定

ロリポップなどのレンタルサーバーのPHP設定をテーマに、PHPのエラー表示などの.htaccessによるサーバー設定中心にまとめています。

詳細

9. WordPress(ワードプレス)のどこにあるか

WordPressでも.htaccessを使用します。 WordPressのインストール媒体を解凍するとその中には「.htaccess」は含まれていません。 どこに「.htaccess」あるのでしょうか。 .htaccessがWordPressのどこにあるのか、また、どこに設置すればよいのかなど、解説していきます。

URの設定がパーマリンクの形式の時に自動生成される

「?p=N」のようなデフォルトの形式でなく、「/pagename」のようなパーマリンク形式の設定を行うと、WordPressは.htaccessファイルを生成もしくは既存の.htaccessに記述を追加します。

自動生成される場所

自動生成される場所はWordPressインストールディレクトリの直下になります。

「.htaccess」編集時の注意点

WordPressは「.htaccess」を自動更新します。自動更新される場所にリダイレクトの記述など追記してしまうと、いつの間にか消えてしまう恐れがあるので注意が必要です。

WordPressが出力する記述

WordPressが出力する記述は以下になります。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

# BEGIN WordPress ~ # END WordPressは自動更新エリア

BEGIN WordPress ~ # END WordPressは自動更新エリアになります。 自動更新エリアにリダイレクトなどの設定を追記しても自動更新のタイミングでクリアされてしまうので注意しましょう。

WordPressの.htaccessの自動更新タイミング

「ダッシュボード>設定>パーマネントリンク設定」の画面を表示したタイミングで自動更新が行われます。 もしどうしても# BEGIN WordPress ~ # END WordPressの自動更新エリアの中の記述を編集しなければならない場合は、.htaccessのアクセス権を444に設定して書込みできないようにすると自動更新されなくなります。

参考)WordPress

WordPress(読み方:ワードプレス)はPHPとMySQLを利用したオープンソース(無料で利用できる)CMS(サイト運用管理ツール)です。 WordPressやレンタルサーバの設定に詳しくない方のサポートを目的に、WordPressや、htaccess(リダイレクトなどに使用する設定ファイル)の場所はどこかなど、サーバー関連の知識をやさしく解説していきます。

詳細

10. レスポンスボディの書換え

.htaccessでレスポンスボディ(HTMLやCSS、JavaScriptなどの記述内容)の書換えが行えます。

mod_substitute

ページ書換えには、mod_substituteを使用します。

URL置き換えの例

例えば、以下のようなHTMLコードを記述したページがあるとします。

<!DOCTYPE html>
<html>
<head>
<title>ページタイトル</title>
</head>
<body>
<a href="https://www.htaccess-support.com">リンク</a>
</body>
</html>

これを以下のような.htaccessの記述でwww.htaccess-support.comのドメインをhtaccess-support.comに置き換えることができます。

AddOutputFilterByType SUBSTITUTE text/html
Substitute "s/www\.htaccess-support\.com/htaccess-support\.com/i"

11. htaccessの変更(書き換え内容)が反映されない場合

.htaccessを変更した後、ブラウザのキャッシュが残っていて反映が確認できない場合があります。

.htaccess自体はサーバ側で読み込まれるもので、ブラウザに送信されませんがブラウザは前回のサーバからの応答(レスポンス)をキャッシュして再利用することがあります。 ブラウザがキャッシュを利用した場合は、サーバー側へリクエストせず、.htaccessの変更内容が反映されないことがあります。

.htaccessの動作確認はブラウザキャッシュをクリアしてから行いましょう。

更新履歴

更新履歴になります。

位置:トップhtaccess