- PR -

Apacheにてアクセス元のネットワークによって表示される内容を変える

投稿者投稿内容
conp
会議室デビュー日: 2004/03/25
投稿数: 17
投稿日時: 2005-03-09 11:55
初めて登校します。
よろしくお願い致します。

NICが2枚搭載されているホストにて
Apacheを動作させています。
クライアントのアクセス元(ネットワーク)
によって表示させる内容を変えたいと思っております。
また、ウェブサーバのホスト名は
同一のものを使いたいと思っております。
Listen と VirtualHost ディレクティブで
可能かと思いましたが、
この場合、クライアント側のアクセス元によって
表示を変えることはできません。
いろいろと調べましたが分かりませんでした。
このようなことは可能でしょうか。
また、どのように設定すればよいでしょうか。

使用している Apache は、
Apache 2.0.46
です。

ご教授のほどよろしくお願い致します。
めぐ
ベテラン
会議室デビュー日: 2004/11/09
投稿数: 86
お住まい・勤務地: 千葉県内
投稿日時: 2005-03-09 12:56
mod_rewriteモジュールでできそうな気がしますが。
http://httpd.apache.org/docs/mod/mod_rewrite.html

RewriteCondで条件を設定して、それにマッチした場合に
RewriteRuleでURLをリライト(置換)します。
conp
会議室デビュー日: 2004/03/25
投稿数: 17
投稿日時: 2005-03-09 19:18
アドバイスありがとうございます。
早速参考に設定してみます。

結果は後ほどご報告させて頂きます。
conp
会議室デビュー日: 2004/03/25
投稿数: 17
投稿日時: 2005-03-10 18:11
httpd.conf の最後の行に
以下を追記してみましたが、
/var/www/html/private
のコンテンツしか見ることができませんでした。

アドバイス頂ければ幸いです。
よろしくお願い致します。

aaa.aaa.aaa.aaa : プライベート側IPアドレス
bbb.bbb.bbb.bbb : グローバル側IPアドレス

----- 以下 -----------------------------------------

RewriteCond %{REMOTE_ADDR} ! ^aaa\\.aaa\\.aaa\\. [OR]
RewriteCond %{REMOTE_ADDR} ! ^bbb\\.bbb\\.
RewriteRule /var/www/html/index.html

NameVirtualHost aaa.aaa.aaa.aaa
NameVirtualHost bbb.bbb.bbb.bbb
<VirtualHost aaa.aaa.aaa.aaa bbb.bbb.bbb.bbb>
ServerAdmin webmaster@abc.de.co.jp
DocumentRoot /var/www/html/private
ServerName www.abc.de.co.jp
ErrorLog logs/priv_error_log
CustomLog logs/priv_access_log combined
CustomLog logs/priv_referer_log referer
CustomLog logs/priv_agent_log agent
</VirtualHost>
めぐ
ベテラン
会議室デビュー日: 2004/11/09
投稿数: 86
お住まい・勤務地: 千葉県内
投稿日時: 2005-03-11 09:40
書き方が若干おかしいようです。

aaa.aaa.aaa.* とbbb.bbb.*.* というネットワーク以外からの全てのリクエストを
/index.html へリダイレクトするのであれば、
(ただし、DocumentRootが/var/www/html になっていると仮定して)

コード:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ! ^aaa\.aaa\.aaa\. [OR] 
RewriteCond %{REMOTE_ADDR} ! ^bbb\.bbb\. 
RewriteRule ^/.*$ /index.html



でいけると思いますが、もしかしたら上の設定を<VirtualHost>内に書かないとだめかも。

確認ですが、
LoadModule rewrite_module modules/mod_rewrite.so
はコメントアウトされていないですよね。
conp
会議室デビュー日: 2004/03/25
投稿数: 17
投稿日時: 2005-03-11 11:08
めぐ様

返信ありがとうございます。
言葉たらずの内容までフォローして頂きありがとうございます。

ご指摘頂いている通り、
DocumentRootは、/var/www/html
となっております。
また、
LoadModule rewrite_module modules/mod_rewrite.so
もコメントアウトされておらず、有効状態です。

この状況下で、
アドバイス頂いた内容でさっそく試してみましたが、
やはり
/var/www/html/private
のコンテンツしか見ることができませんでした。

Rewrite 関連内容を
VirtualHost ディレクティブの中に記述する場合と、
外に記述する場合も試しましたがだめでした。

また、Rewrite 関連内容を
VirtualHost ディレクティブの前と後に書いた場合の
動作確認も行いましたが同様にだめでした。

そこで、動作の切り分けを行うため、
まずはリダイレクト部分の動作確認をするために
プライベート側(aaa.aaa.aaa.*)から
アクセスがあった場合に
DocumentRoot にリダイレクトするかどうか
以下のように記述して
aaa.aaa.aaa.* 側のホストからWebサーバにアクセスしてみました。
しかし、プライベート側のバーチャルホストが見えてしまいます。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^aaa\\.aaa\\.aaa\\.
RewriteRule ^/.*$ /index.html
</IfModule>

NameVirtualHost aaa.aaa.aaa.aaa
<VirtualHost aaa.aaa.aaa.aaa>
ServerAdmin webmaster@abc.de.co.jp
DocumentRoot /var/www/html/private
ServerName www.abc.de.co.jp
ErrorLog logs/priv_error_log
CustomLog logs/priv_access_log combined
CustomLog logs/priv_referer_log referer
CustomLog logs/priv_agent_log agent
</VirtualHost>

リダイレクトも出来ない状況です。
よろしくお願い致します。
めぐ
ベテラン
会議室デビュー日: 2004/11/09
投稿数: 86
お住まい・勤務地: 千葉県内
投稿日時: 2005-03-11 11:59

RewriteCond で ^aaa\\.aaa\\.aaa\\. と書かれてますが、
バックスラッシュが一つ余計じゃないですか?

VirtualHostディレクティブ内に書いた場合は、DocumentRootが
/var/www/html/private になりますので、
/var/www/html/private/outer.html とか用意してそこに

RewriteRule ^/.*$ /outer.html

でリダイレクトさせるとか。
conp
会議室デビュー日: 2004/03/25
投稿数: 17
投稿日時: 2005-03-11 12:21
めぐ様

早速の返信ありがとうございます。
RewriteCond のところですが、
実際にはバックスラッシュ1個だけで書いています。
なぜか、こちらに投稿した際には2個になっていました。

また、切り分けとして作業していました
リダイレクト動作に関しては確認できました。
あとは、バーチャルホストに対して
どのようにリダイレクトするかが問題です。

ご返答頂いた案ですが、
/var/www/html/index.html
/var/www/html/private/index.html
で出来ないかと思っております。

もう少し自分なりに取り組んで見ます。
また上記の内容で良い案がありましたら
ご教授頂けると幸いです。

よろしくお願い致します。

スキルアップ/キャリアアップ(JOB@IT)