htaccessとは―Apacheの設定ファイル。読み方や使い方のサポート。
技術情報
htaccessとは、ホームページなどを公開するApache HTTP Server(Webサーバ)の設定ファイルです。読み方は「エイチティーアクセス」です。htaccessの使い方など技術サポートを目的にまとめています。
目次
この記事の目次です。
1. .htaccessとは
2. .htaccessの読み方
3. .htaccessの作成方法
4. .htaccessの置き場所
5. .htaccessの書き方
6. .htaccessのリダイレクトの書き方
7. .htaccessのアクセス制限、BASIC認証の書き方
8. .htaccessのPHPの設定の書き方
9. .htaccessのレスポンスボディの書換え
10. .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」することで起動できます。



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

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ファイルを記述する必要がある点が重要なポイントです。
WordPress(ワードプレス)のどこにあるか(WordPressの.htaccessの場所)
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(リダイレクトなどに使用する設定ファイル)の場所はどこかなど、サーバー関連の知識をやさしく解説していきます。
5. .htaccessの書き方
.htaccessは「.htaccess」という名前のファイルにApache HTTP Serverの制御を行う記述を書きます。 .htaccessで使用できる文法に従って1行に1命令という形式のディレクティブを記述します。
コメント
行の初めに「#」を記述するとコメントとして扱われ設定が無効になります。
レスポンスボディの書換え
.htaccessでレスポンスボディ(HTMLやCSS、JavaScriptなどの記述内容)の書換えが行えます。
mod_substitute
mod_substituteは、正規表現や固定文字列を使用してレスポンスボディ(HTMLやCSS、JavaScriptなどの記述内容)の書換え(置換)機能を提供するモジュールです。 読み方は「モッド・サブスティチュート」で、.htaccessでも利用できます。
6. .htaccessのリダイレクトの書き方
.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. .htaccessのアクセス制限、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. .htaccessの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. .htaccessのレスポンスボディの書換え
.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"
10. .htaccessの変更(書き換え内容)が反映されない場合
.htaccessを変更した後、ブラウザのキャッシュが残っていて反映が確認できない場合があります。
.htaccess自体はサーバ側で読み込まれるもので、ブラウザに送信されませんがブラウザは前回のサーバからの応答(レスポンス)をキャッシュして再利用することがあります。 ブラウザがキャッシュを利用した場合は、サーバー側へリクエストせず、.htaccessの変更内容が反映されないことがあります。
.htaccessの動作確認はブラウザキャッシュをクリアしてから行いましょう。
関連リンク
関連リンクです。
htaccessサポート
htaccessサポートは.htaccessを中心としたホームページの保守サポートの提供を目的に活動しています。
更新履歴
更新履歴になります。
- 2020/7/9 アクセス制限について追記しました。
- 2020/7/5 htaccessの変更が反映されない場合について追記しました。
- 2020/6/9 リダイレクトなどhtaccessの書き方について追記しました。
- 2019/10/26 記事をアップしました。