|
『foobar ユーザ用のサブドメインを foobar.example.com としたとき、 http://foobar.example.com/foobar.html にアクセスされた場合、 /path/to/htdocs/foobar.example.com/foobar.html がなければ、デフォルトで /path/to/htdocs/www.example.com/foobar.html の共通ファイルを返す』 ための httpd.conf の設定例でした。 実際には、JS や CSS とかの各ドメインで共通に使う静的ファイルについては、 キャッシュがちゃんと効くように、専用 URL を作ってそこに置いたほうが良い。 さて今回は、『同様のワイルドカードAレコードなマルチユーザ対応環境で、 ファイルベースのユーザの存在確認を行って、ユーザが存在しない場合に デフォルトの共通ファイルを(200 OK ステータスで)返すのではなくて、 404 Not Found ステータスを返す』ための設定例です。 <IfModule mod_setenvif.c> mod_rewrite に加えて、mod_setenvif モジュールが必要です。 サブドメイン名(=ユーザ名)を環境変数 SUBDOMAIN に入れています。 foobar ユーザ用のサブドメインを foobar.example.com としたとき、 /path/to/db/foobar.db ファイルが存在する場合は通常通り処理して、 /path/to/db/foobar.db ファイルが存在しない場合は、 foobar.example.com サブドメイン全体で 404 Not Found エラーを返します。 [R=404] の値を変更すれば、その他のステータスも返却できます。 [R] だけにして、指定した外部 URL にリダイレクトさせるのもできますね。 ユーザごとに1ファイルずつを設置している必要がありますが、 Apache+ファイルテストだけでユーザの存在確認が可能になります。 ユーザ存在確認のために、リクエストの度に DB 接続するプログラムを 起動しなくて済んで、中規模のサイトに優しい気がする。 また、!-f を !-d にすれば、ディレクトリで存在確認することも可能です。 1フォルダに並べたくないほどに、ユーザ数が増えてしまった場合は、 とりあえず、ユーザ名の先頭の文字とかで刻んで行くとか。 SetEnvIf Host "^(.)" CHAR1ST=$1 あるいは、ファイルシステムとしてマウントできる DB はないかな? |
| << 前記事(2009/02/26) | トップへ | 後記事(2009/03/01)>> |
| タイトル (本文) | ブログ名/日時 |
|---|
| 内 容 | ニックネーム/日時 |
|---|
| << 前記事(2009/02/26) | トップへ | 後記事(2009/03/01)>> |