備忘録。らしい。

⋯⋯らしい。

たとえばレンタルサーバで複数のドメインを別々に運用するとき、親のドメインと子のドメインは関係ないわけだ。とりあえずレンタルサーバ上で押さえた「悪の秘密結社」ドメインのサーバ内のディレクトリを「世のため人のため」なんてドメインで運用してもいいのだが、もしそのとき次のようなURIアクセスを受けると悲惨である。

http://悪の秘密結社.com/世のため人のため/
世間的にはあまり親子の関係を暴露したくない場合もあるというわけだ。そこで「.htaccess」で細工しておくといいと知った
SetEnvIf Host "^バーチャル\.ドメイン\.com$" hos_ok
order deny,allow
deny from all
allow from env=hos_ok
ところがこれに、特定のドメインからのアクセス者を除いて一般アクセスを拒絶する人見知りモードを組み合わせてみたが、うまくいかない。
order deny,allow
deny from all
allow from .みてもいいよ.jp
allow from .ごらんください.net
「allow from env=hos_ok」を書いてしまった時点で、その条件でのアクセスについては「allow from どのドメインでも」になってしまうわけらしい。
これを「allow from env=hos_ok .みてもいいよ.jp」なんて組み合わせにもできないことがわかった。
あー困った。うー困った。
そこで発想をひっくり返してみた。
#子ルートに置く.htaccess
SetEnvIf Host "^初期ドメイン\.sakura\.ne\.jp$" hos_ng
order allow,deny
allow from .みてもいいよ.jp
allow from .ごらんください.net
#deny from all
deny from env=hos_ng
「order」の順番を逆にして、先に許可するドメインを設定してあとは拒絶する。もし親子関係を辿られてもいいように、親ルートと子ルートに「404.html」をそれぞれ置いておき、親ルートには次の「.htaccess」を記述する。
#親ルートに置く.htaccess
DirectoryIndex index.html index.php /404.html .ht
ErrorDocument 403 /404.html
ErrorDocument 404 /404.html
403、404とも同じ404エラーで返すのは、いたずらにディレクトリを掘られることへの対策だ。親ルートで宣言しておけば、オーバーライドしない限り子ルート以下でも有効かつ、それぞれ状況に応じて「404.html」が読み分けられるというわけだ。
本来人見知りモードは親ルートこそに設定するべきなのだが、テスト中の子ルートを隠匿しておきたい場合などは、上記の方法で回避できる。らしい。