ファイルやURL関連の設定、5回目

前回は特定のディレクトリごとに基本設定を行った。今回は特定のファイルやURLに対して設定を行ってみよう。

Apacheには各ディレクトリに .htaccess という設定ファイルを配置することで、そのディレクトリ以下の設定ファイルを変更できるようになっている。

ファイルを指定する

ディレクトリごとの設定を行えるのに対して、ではファイルごとの設定を行える。

<Files security.html>
     Order allow deny
     allow 192.168.1.0/24
     deny all
</Files>

これで security.html にアクセスできるのは 192.168.1.0/24 だけとなった。

URLを設定する

ファイルやディレクトリと同様にして、URLに対しても  を使って設定することができる。

<Location /project>
     Options ExecCGI SymLinksIfOwnerMatch
     Order allow deny
     allow 10.0.0.0/16
     deny all
</Location>

こうすればドキュメントルート上にある projectディレクトリでリンク先の参照とCGIの実行を許可し、10.0.0.0/16以外からのアクセスを拒否できる。

正規表現でのファイルの記述情報

,,では正規表現を使うと複数のディレクトリやファイルやURLに対して設定を行うことができる。使える正規表現は次のとおり。

正規表現 意味
. 改行文字以外の任意の1文字
直前の1文字の0回以上の繰り返しに一致。直前の文字は正規表現でもかまわない
^ 行の先頭
$ 行の末尾
[] かっこ内の任意の1文字に一致。"-"で範囲指定もできる
[^] かっこ内の任意の1文字に不一致。"-"で範囲指定もできる
pattern1|pattern2 pattern1またはpattern2のいずれかに一致
\ 正規表現に使われる記号を普通の文字として扱う

このときはなどの表記は使わずに、次のようにする

正規表現を用いる場合

.htaccess で設定を上書きする

ソースからApacheをインストールした場合、/usr/local/apache2/conf/httpd.conf を変更できるのは root =そのマシンの管理者。コンテンツを別の人が管理している場合、設定変更を root に依頼するのは面倒。かといってコンテンツを管理している人にも root 権限を渡すのはどうかと思う。

そこで役立つのが .htaccsss ファイル。あるディレクトリに .htaccess をおいておくと、そのディレクトリにアクセスがきたときには .htaccess が読み込まれる。

.htaccess を有効にする

不用意に .htaccess を有効にしておくのは危険。そこで Apache の初期設定では .htaccess ファイルを利用できないようにしてある。

<FileMatch "\.ht">
     Order allow, deny
     Deny from all
</FileMatch>

↑これを↓こうする。

#<FileMatch "\.ht">
#     Order allow, deny
#     Deny from all
#</FileMatch>

そして、Allow Override を使って .htaccess で可能な設定を許可しておけばいい。例えば .htaccess でアクセス制限を行うには、

AllowOverride Limit

としておく。Limit 以外に複数の機能を列挙したい場合は空白で区切って項目を並べておく。

項目 内容 変更可能な項目
AuthConfig 認証に関連する設定を許可する AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthAme, AuthType, AuthUserFile, require
FileInfo ファイルや言語、MIMEなどに関する設定を許可する AddType, AddEnconfig, AddLanguage, AddCharset, AddHandler, RemoveHandler, LanguagePriority, ErrorDocument, DefauultType, Action , Redirect, RedirectMatch, RedirectTemp, RedirectParmanent, PassEnv, SetEnv, UnsetEnv, Header, RewriteEnconfig, RewriteOptions, RewriteBase, RewriteCond, RewriteRule, cookieTracking, Cookiename
Indexes インデックスの設定を許可する FancyIndexing, AddIcon, AddDescription
Limit アクセス制限の設定を許可する Order, Deny, Allow
Options Optionsの機能設定を許可する。書式は「Options=機能,機能…」 Options
All すべての設定を許可する 上記すべての設定項目
None すべての設定を不許可にする なし

1つ注意することは「Options=」で項目を列挙する場合、カンマで区切るが、カンマの前後にスペースを入れてはいけない。

Options項目の上書き

Apacheではディレクトリの設定はサブディレクトリにも継承される。例えば親ディレクトリにIndexesとSymLinksIfOwnerMatchが設定されている場合、サブディクトリではCGIを実行させたいので .htaccess ファイルに「Options ExecCGI」と設定すると、ExecCGIは有効になるが親ディレクトリで設定していたIndexesとSymLinksIfOwnerMatchが無効になってしまう。そこでOptionsの項目を設定する場合は「+」を付加する。

Options +ExecCGI

文字化けへの対処

Fedra Core のパッケージを指定している場合、/etc/httpd/conf/httpd.conf ファイルにデフォルトで文字コードを指定しているので、文字化けが起こってしまう。これは httpd.conf ファイルで指定した文字コードとhtmlファイルの文字コードが異なっている場合に起こる。

AddDefaultCharset UTF-8
↑これを↓こうする
# AddDefaultCharset UTF-8

htmlファイルのヘッダー部分に次のように記述していても、この問題は発生するのである。

<meta httpd-equiv="content-type" content="text/html; charset=EUC-JP">

これでよし。