Apache
設定ファイルはhttpd.conf
httpd.confとは、WebサーバのプログラムであるApacheの設定ファイル。
例えば、文字コードなどの設定をできる。
ディレクティブとコンテキストの違い
ディレクティブ
ディレクティブは、Apacheサーバーの設定を定義する命令や指示です。これらはApacheの動作を制御するために使用されます。
例えば以下をhttpd.confに記載することでApacheの挙動を設定できる。
ServerName: サーバーのホスト名を設定する。
DocumentRoot: サーバーのルートディレクトリを指定する。
ErrorLog: エラーログのファイルを指定する。
コンテキスト
コンテキストは、ディレクティブが有効となる範囲や場所を示すもので、どの設定がどの部分に適用されるかを決定します。
Apacheにはいくつかの異なるコンテキストがあり、ディレクティブは特定のコンテキスト内で有効になります。
おおむねコンテキストは4つあります。
サーバーレベル (Server Context)
サーバー全体に適用される設定。httpd.conf 内のディレクティブは通常、このコンテキストに適用されます。
仮想ホスト (VirtualHost Context)
特定の仮想ホスト(ドメインやIPアドレス別)の設定。<VirtualHost> 内に書かれたディレクティブは、その仮想ホストにだけ適用されます。
ディレクトリ (Directory Context)
特定のディレクトリに対して適用される設定。<Directory> タグ内に記述されたディレクティブは、そのディレクトリとそのサブディレクトリに対して有効です。
ファイル (Files Context)
特定のファイルに対して適用される設定。<Files> タグ内に記述されたディレクティブは、指定されたファイルに対してのみ有効です。
場所 (Location Context): 特定のURLパスに対して適用される設定。<Location> タグ内に記述されたディレクティブは、指定されたパスに対してのみ有効です。
# サーバーレベルでの設定
ServerRoot "/etc/httpd"
Listen 80
# 仮想ホストの設定
<VirtualHost *:80>
ServerName example.com
DocumentRoot "/var/www/html/example"
</VirtualHost>
# 特定のディレクトリの設定
<Directory "/var/www/html/example">
AllowOverride None
Require all granted
</Directory>
エイリアスで遷移したいURLを指定する
構文
Alias エイリアス名 ファイル(ディレクトリ)へのパス
例
Alias /apache "c:/MAMP/htdocs/"
実行結果
指定したディレクトリとサブディレクトリに対してディレクティブを設定する
構文
<Directory ディレクトリのパス>
</Directory>
例
<Directory "c:/MAMP/htdocs/">
## ディレクトリにアクセスした際に最初に表示されるファイルを指定するための設定です。
## これは、ユーザーが特定のディレクトリにアクセスしたとき、ブラウザが自動的に表示するファイルを決定するために使用されます。
DirectoryIndex dir1/test.txt
</Directory>
実行結果
.htaccess
.htaccessは.htaccessを配置したディレクトリ単位でディレクティブを指定できる。
.htaccessは非常に強力ですが、設定を誤るとウェブサイトの動作に影響を与えることもあるため、慎重に扱う必要があります。
.htaccessを使用するにはhttpd.confのAllowOverrideを設定する
設定値 | 説明 |
---|---|
None | .htaccess の設定を無視(デフォルト推奨) |
All | .htaccess で全ての設定を許可 |
AuthConfig | 認証関連の設定を許可 |
FileInfo | MIMEタイプやリライトルール (mod_rewrite) などを許可 |
Indexes | ディレクトリリストの設定を許可 |
Limit | アクセス制限(Allow、Deny、Require など)を許可 |
Options | Options ディレクティブの使用を許可 |
.htaccessを使用するには、None以外を使用する。
実際にやってみる。
httpd.confのAllowOverrideをAllにする
C:\MAMP\htdoc内に、.htaccessを作成し以下を記載する
# 指定したファイルが見つからない場合、Error.txtを表示する
ErrorDocument 404 Error.txt
Error.txtを作成すると、以下のようなディレクトリになる。
"http://localhost:8888/test1.txt"にアクセスすると、test1.txtが存在しないのでError.txtが表示される
.htaccessはApache再起動する必要なし
リダイレクトを行う
リダイレクトは、あるURLにアクセスした際に、自動的に別のURLへ転送する仕組みのことです。
構文
Redirect [status] 元のURL リダイレクトするURL
[status]は、
301 永続的なリダイレクトの設定に使用
302 一時的に引っ越したことを表す(デフォルト)
実際にやってみる。
以下のような、test.txtとredirect-test/redirect.txtを用意する
例
Redirect /test.txt /redirect-test/redirect.txt
実行結果
外部のサイトもリダイレクト可能
Redirect /test.txt https://google.com
ページ単位のリダイレクト
Redirect /test.txt /redirect-test/redirect.txt
ディレクトリ単位のリダイレクト
Redirect /old-folder/ https://example.com/new-folder/
ドメイン全体のリダイレクト
Redirect 301 / https://newdomain.com/
301と302のキャッシュについて
301は、ブラウザがリダイレクトをキャッシュする。
302は、ブラウザがリダイレクトをキャッシュしない。
もしWebサーバ側でリダイレクトのURLを変えた場合、
302の場合は、変更したリダイレクトのURLが反映されるが、
301の場合は、Webブラウザのキャッシュを変更しない限り変更したリダイレクトのURLが反映されない。
ログの設定
エラーログのレベルを設定する
構文
LogLevel レベル
例
LogLevel error
レベル | 説明 |
---|---|
emerg | 緊急 |
alert | 致命的な状態 |
crit | 認証関連の設定を許可 |
error | エラー |
warn | 警告(デフォルト) |
notice | 普通だが、重要な情報 |
info | 追加情報 |
debug | デバッグメッセージ |
エラーログのファイルパスを指定する
構文
ErrorLog ファイルパス
例
ErrorLog "C:/MAMP/logs/apache_error.log"
ログのフォーマットを指定する
構文
LogFormat "フォーマット文字列" ログフォーマット名
ログフォーマット名:CustomLogディレクティブで使用する名前(省略可能)
基本的に、CustomLogと一緒に使用する。
例
LogFormat "%h %l %u %t \"%r\" %>s %b" common
詳しい詳細は、以下を参照する。
RewriteRuleとRewriteCondでURLのリダイレクトや書き換えを行う
RewriteRuleとRewriteCondで以下のようなことができる。
URLを別のファイルにリダイレクト
拡張子なしURLの対応
クエリパラメータをフレンドリーURLに変換
HTTPSへリダイレクト
wwwあり/なしの統一
IPアドレスによるアクセス制限
モバイルユーザーを専用ページにリダイレクト
Discussion