基本的なサンプル
WordPressのパーマリンク設定例とかでよく見られるもの
すべてのリクエストを/index.phpに書き換え、アプリケーションが処理する
<IfModule mod_rewrite.c> # mod_rewriteが使用できる環境か確認
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
pythonをcgiで動作させるためのもの
pythonファイルに直接アクセスできないようにしつつ、cgiで処理するように
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.cgi/$1 [QSA,L]
<Files ~ "\.py$">
deny from all
</Files>
.htaccessファイル作成時の注意点
- Apacheウェブサーバーで使用できる設定ファイルのこと(一部例外有)
- ファイル名は「.htaccess」にする。(.txtなどの拡張子はつけない)
- ファイルをアップロードする際は、ASCIIモードで行う
- 文字コードは「UTF-8」(BOMなし)、改行コードは「LF」
- パーミッションは「644」にする
配置場所と設定有効範囲
- ルートディレクトリに.htaccessファイルが設置された場合は、そのディレクトリと配下にある全てのディレクトリに影響
- ルートではなく、一つ下の階層に設置するとそのディレクトリと配下のディレクトリのみに限定
コメント化
#
を使用することでコメントアウトが可能# コメント化したい内容
インデックスファイル
- 「/」で終わるアクセスの際に表示するファイル
- 左から探し、最初に見つかったファイルを index として表示
DirectoryIndex index.html index.htm index.php index.cgi・・・
アクセス制御
- デフォルトはDeny(拒否)
- Order は後に記述された方がデフォルトになる
- Order Allow,DenyならデフォルトはDeny(拒否)
- Order Deny,Allow ならデフォルトはAllow(許可)
全アクセスを禁止
order deny,allow
deny from all
特定のファイルのアクセスを禁止
.htaccessは該当ファイルと同じ階層に配置すること
<Files ~ "\.log$">
deny from all
</Files>
デフォルト拒否で、一部のIP許可
社内ネットワークの接続元IPアドレス(もしくはIPアドレス空間)からしかアクセスできないようにするといった用途が多い
Order Allow,Deny
Allow from XXX.YYY.ZZZ.1
Allow from XXX.YYY.ZZZ.2
デフォルト許可で一部のIP拒否
Order Deny,Allow
Deny from XXX.YYY.ZZZ.1
Deny from XXX.YYY.ZZZ.2
BASIC認証
- .htpasswdは非publicのディレクトリに配置すること
- パスワードは以下のようなサイトを活用して生成する
- 特定ディレクトリだけベーシック認証をかけたい場合はそのディレクトリに.htaccessを置く
.htaccess設定例
#Basic認証の使用するための記述
AuthType BASIC
#「.htpasswd」が存在する絶対パス
AuthUserFile "/home/hoge/foo.com/.htpasswd"
#アクセス時のダイアログに表示される名称(任意)
AuthName "Member Site"
#認証したユーザは誰でもアクセスOK
require valid-user
#外部から「.htaccess」「.htpasswd」が見えないように
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
ダイジェスト認証
- Basic 認証とは異なりブラウザとサーバ間でユーザー名とパスワードの情報がやり取りされる際に MD5でハッシュ化されて送信される
- 任意の長さの原文を元に128ビットの値を生成するハッシュ関数(要約関数)の一つ。 生成された値はハッシュ値と呼ばれる
※飛躍的にセキュリティ面が向上するということでもないらしく、公式では Basic 認証+ SSL を推奨されている模様
リライト/リダイレクト
リライトを有効にするための記述
そもそもmod_rewriteが有効になっていない(以下の設定がない)と、リライト・リダイレクトができないので注意
RewriteEngine on
RewriteRule
どのようにURLのリライトやリダイレクトするかの記述
RewriteCond
- RewriteRuleが行われる条件を記述
- 以下では、存在しないファイル・ディレクトリにアクセスした場合は、全てindex.phpを返して処理する
<IfModule mod_rewrite.c> # mod_rewriteが使用できる環境か確認
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
エラーページの指定
表示するページをエラーの種類ごとに設定できる
ErrorDocument 400 /400.html
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
ErrorDocument 502 /502.html
ErrorDocument 504 /504.html
まとめ
いかがでしたでしょうか。本記事では、Apacheウェブサーバーで使用可能な.htaccessを使用してできる基本的な内容について紹介しています。よく使われるBASIC認証やIP制限に関しては、エンジニアとしての必須知識になりますので、ぜひ参考にしてみてください