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/