- ベストアンサー
IP制限について
- 特定のクライアントに制限したコンテンツサービスを作成するためにIPアドレス制限を使用していますが、メインページも制限したいという問題に直面しています。
- TOPページにはAバナーとBバナーを表示し、登録されたIPアドレスからのアクセスのみAバナーを表示させたいと考えています。
- もし難しい場合はhtaccessを使用して登録されたIPアドレスからはIndex.htmlを表示し、それ以外のIPアドレスからは別のサイトにリダイレクトさせる方法についても教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Rewrite を使えばいけると思います。 httpd.conf を変更できない、分からない場合は、サーバ管理者に mod_rewrite、rewrite_module が使用可能か問い合わせてみてください。 ■設定例 httpd.conf # モジュールをロードする LoadModule rewrite_module modules/mod_rewrite.so # 対象ディレクトリの設定 <Directory ?> Options FollowSymLinks AllowOverride FileInfo Allow from all </Directory> .htacess RewriteEngine On # IP 220.10.10.1 RewriteCond %{REMOTE_ADDR} 220\.10\.10\.1 RewriteRule ^index\.html$ /remote220.10.10.1.index.html [L] # IP 220.10.10.2 RewriteCond %{REMOTE_ADDR} 220\.10\.10\.2 RewriteRule ^index\.html$ /remote220.10.10.2.index.html [L] ■解説 RewriteCond では、最初にテスト対象値(文字列)と正規表現のパターンを指定します。 RewriteCond テスト対象値 パターン RewriteCond %{REMOTE_ADDR} 220\.10\.10\.1 では、リモート(ブラウザ、プロキシ、ロボット)のアドレスをパターンと比較し一致した場合に、次の RewriteRule が適用されます。 RewriteRule では対象とするパスのパターン(.htaccess の置かれたディレクトリからのパス)と、書き替え後のパス(ドキュメントルートからのパス)と[L]を指定します。 RewriteRule アクセス時のパス 書き換え後のパス [L] [L] の意味はパターンに一致し書き換えを実行した場合、後続の処理を行わないオプション指定です。 RewriteRule ^index\.html$ /remote220.10.10.1.index.html [L] では、.htaccess のあるディレクトリの index.html ファイルに対するアクセスを、 (ドキュメントルート)/remote220.10.10.1.index.html に書き替えるようにしています。 書き換えが行われた場合、変更後のパスのファイルが返され、書き換えが行われない場合、元のパスのファイルが返されます。なお、この処理はサーバ側で完結するため、クライアントに表示される URL はどちらも同じです。 詳細については下記リファレンスを参照してください http://httpd.apache.org/docs/current/mod/mod_rewrite.html http://httpd.apache.org/docs/2.0/misc/rewriteguide.html
その他の回答 (3)
- ORUKA1951
- ベストアンサー率45% (5062/11036)
一般の方に見せるファイルは普通にディレクトリに入れてそのディレクトリのすべての.htaccessに <Files "index.html"> AddHandler text/html .html </Files> を書いておきます。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
特定のIPのみ許可するなら Order deny,allow Deny from All # 許可するIP Allow from xxx.xxx.xxx.xxx Allow from xxx.xxx.xxx.xxx ですが、ipによって表示させるページを隠したり、変えたりする場合は面倒なので ・・あくまで私が良く使う方法で必ずしも一般的ではないですが・・ <Files "index.html"> AddHandler cgi-script .html </Files> でルート(この.htaccess)以下のすべてのindex.htmlをCGIとして認識させて !/usr/local/bin/perl print ~ Pragma: no-cache Cache-Control: no-cache Expires: -1 Content-type: text/html\; charset=Shift_JIS ~; # IPチェック if($ENV{'REMOTE_ADDR'}=~/123.456.789/012/){ # PATH_INFOを調べる if($ENV{'PATH_INFO'}=~ m#/.+$#){ # 表示するファイル(privateXYZは任意の隠しディレクトリ $file = 'privateXYZ'.$ENV{'PATH_INFO'}; if( -e $file ){ if( open( IN,$file )){ while(<IN>){ print; } else{ # ふあぃるがない場合notFoundくかもり } else{ while(<DATA>){ print; } else{ # 指定されたIP以外 } # END以降にHTMLソース __END__ とか、これは、$ENV{'REMOTE_ADDR'}ですが、$ENV{'HTTP_COOKIE'}とか、様々な環境変数を使って振り分けたり、CSSを変えたり、画像を表示したり、変化させたり、様々に使えるので・・よくこの方法を使ってますが・・
- q0190dg
- ベストアンサー率50% (4/8)
phpで実現できると思います。 ためしにhoge.phpというファイルを作って試してみるといいと思います。 <?php if(isset($_SERVER["REMOTE_ADDR"]));{ if($_SERVER["REMOTE_ADDR"]=="xxx.xxx.xxx.xxx"){ //$_SERVER["REMOTE_ADDR"]でIPを取得できる。 echo '<a href="a.html"><img src="a.jpg"></a>'; //IPアドレスが合致した場合 }else{ echo '<a href="b.html"><img src="b.jpg"></a>'; //IPアドレスがちがかった場合 }else{ echo '<a href="b.html"><img src="b.jpg"></a>'; //IPアドレスが取得できなかった場合 } ?> もしサーバーがphpをサポートしていなかったり、ファイル名を変えるのが嫌な場合はhtaccessで振ることはできると思いますが、それはphpができなかった場合のフェーズ2で。
お礼
完璧です!!! ご丁寧な解答いただきありがとうございました。 心より感謝申し上げます。