作者: davi
日時: 2008/4/14(00:29)
Zazelさん  <  こん??は でび です

On Tue, 08 Apr 2008 06:09:56 +0900 (JST)
Zazel <zazel.ts@...> wrote:

> “クライアント側が要求した”という意味ではHTTP_HOSTになりますが、
> 要求してこないとき(古いブラウザや怪しいクローラ)は設定されない
> こともあるので、確実な振り分けにはSERVER_NAMEがいいと思います。

早速ありがとうございました。

浸透するまで作業中断していましたが、ご教示を参考に、
試してみました。

結論的には、ドメインエイリアスのぶら下げ元のサーバが
SERVER_NAMEを吐き出さない仕様になっているようで、
HTTP_HOSTで処理しました。

example.jpのディレクトリ構成が

//----+/ftp/
   |
   +/html/.htaccess
   |
   +/log/

のような感じで、.htaccessは

# -----------------------------------------------------------------
Options +FollowSymLinks -Indexes
RewriteEngine On
RewriteBase /home/hogehoge/html
# -----------------------------------------------------------------
# RewriteCond %{SERVER_NAME} ^(www\.)?example\.net)(.*) [NC]
# このサーバではSERVER_NAMEの環境変数は参照できないようだ。
# 結局、HTTP_HOSTを採用。
# サブディレクトリ指定は無視してルートに飛ばす。
RewriteCond %{HTTP_HOST} ^(www\.)?(example\.net)(.*) [NC]
RewriteRule ^(.*) http://www.example.org/ [R=301,L]
# =================================================================
# 以下、example.jpへのwwwなしでのアクセスを301エラーで永久リダイレクト
# サブディレクトリ指定を補って飛ばす。
RewriteCond %{HTTP_HOST} ^(example\.jp)(:80)? [NC]
RewriteRule ^(.*) http://www.example.jp/$1 [R=301,L]
# -----------------------

こんな感じで、本来のドメイン名の制御も、エイリアスのドメイン名の
リダイレクト制御も、両立できました。

ただ、(機能的には公開していない)ftpのアドレスに対しては
/html/.htaccessに置いているので制御が効かず、しかし、
/ftp/.htaccessに同様の指定を置いても、先にユーザ名とパスワード
の問い合わせが効いてしまいました。

じゃぁ、ルートに置いたらどうか、と試してみましたが、
htmlディレクトリそのものが500エラー(Internal Server Error)
となり、断念。

まぁ、ftpディレクトリは、元々、使用していない機能だったので、
これで良しとすることにしました。

懸案事項が解決し、ほっと一安心。

これで旧サイトの契約を解除し、キャッチオールで来る
ジャンクメールともおさらばできます。
ありがとうございました。

> HOSTNAMEはApacheとは関係ない管理者が指定したサーバの名前だろうし、
> REQUEST_URIにはドメイン部分は入らずにパスだけです。

最近は、アーメン2号とかでは情報が足りませんね。

お盆辺りに時間ができたら、phpの勉強も兼ねて、
「色々拡張された環境変数も。とにかく全部見ますよ版」
のenvチェッカーCGIでも移植してみようかと思っています。

でび  http://davi.txt-nifty.com/1984/