質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

解決済

2回答

5280閲覧

.htaccess での IP制限について

zvub1123

総合スコア230

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

0クリップ

投稿2018/06/14 02:04

編集2018/06/14 09:08

Web上の情報を参照しながら、.htaccess にてIP制限の実施を試みているのですが、上手くいきません。
どなたかご教示いただけますでしょうか。

■やりたい事
ローカルホスト以外のIPからの、サイトへのアクセスをSorryページにリダイレクトしたい。

■環境
Apache:2.2.15
IP :192.168.11.39
GIP:XXX.YYY.ZZZ.ABC

■httpd.conf の記述

DocumentRoot "/var/www/html" <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny #Order deny,allow Allow from all #Allow from 127.0.0.1 </Directory>

■.htaccess内の記述

ErrorDocument 503 /user_data/sorry.php <IfModule mod_rewrite.c> RewriteEngine On #RewriteBase / RewriteCond %{REQUEST_URI} !^/user_data/sorry.php RewriteCond %{REQUEST_URI} !^/user_data/ RewriteCond %{REMOTE_ADDR} !^XXX.YYY.ZZZ.ABC$ RewriteCond %{REMOTE_ADDR} !^192.168.11.39$ RewriteCond %{REMOTE_ADDR} !^127.0.0.1$ RewriteRule ^.*$ /user_data/sorry.php [L] </IfModule>

上記の様に、念のためと思い.htaccess内にはローカルIPとグローバルIPを両方記述していたのですが、
結局のところ httpd.conf にてAllowOverrideを有効化すると、外部、ローカルホスト共にSorryページにリダイレクトされてしまいます。
おたすけください。。。

以上です。
よろしくお願い致します。


★追記★17:57

修正後の httpd.conf

<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all ErrorDocument 503 /user_data/sorry.php <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !(^/user_data/sorry.php) RewriteCond %{REQUEST_URI} !(^/user_data/) RewriteCond %{REMOTE_ADDR} !(^192.168.11.39)$ RewriteRule ^.*$ /user_data/sorry.php [L] </IfModule> </Directory>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

VirtualHostで処理したほうがラクでは?

  • ローカル向けDNSに適当なサーバー名を設定
  • httpdは外部IPからのアクセスには「Sorry」をデフォルト
  • 内部からの内部名称をつかったアクセスにはバーチャルページを表示

投稿2018/06/14 03:18

yambejp

総合スコア114784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/14 03:24

ラクそうですね。
guest

0

ベストアンサー

「rewritecond remote_addr」などでネット検索すれば、
いくらでも事例が見つかるようです。

特定のIP(範囲指定?)のみ許可RewriteCond。モバゲーとかはプロキシ経由元で判別 - tweeeetyのぶろぐ的めも

RewriteCond %{REMOTE_ADDR} !^192.168.11. ←ちょっと直した($をとった)

この行で、ローカルじゃないアドレスが対象になるのではないでしょうか。
(ローカルのアドレス範囲が192.168.11.1/24だとして。)

RewriteCond %{REMOTE_ADDR} !^127.0.0.1$

ならホスト内ローカルループバックアドレスですし。


REQUEST_URIへのマッチングが間違ってるのかもしれない。

RewriteCondが効かない?特定のディレクトリを除外する方法でつまずいたお話 | Step On Board

RewriteCond %{REQUEST_URI} !(^/user_data/)

って感じになるだろうか?

個別の事例の書き方が迷う場合は、
mod_rewrite - Apache HTTP Server Version 2.4
も併せてみると良いかも。

投稿2018/06/14 02:39

編集2018/06/14 05:51
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zvub1123

2018/06/14 02:59

ご回答ありがとうございます。 すみません、色々ページは参考にさせていただいているのですが、確認させてください。 上記の .htaccess の記載の一部のみ見た場合、 RewriteCond %{REMOTE_ADDR} !^192.168.11.39$ (192.168.11.39 以外のアドレスを) RewriteRule ^.*$ /user_data/sorry.php [L] (/user_data/sorry.php にリダイレクトさせる) という意味にはならないでしょうか?
退会済みユーザー

退会済みユーザー

2018/06/14 03:23

REMOTE_ADDRって、サーバー自身のアドレスじゃないよ。接続してくる相手のアドレスのことだよ。ゴマンとあるIPアドレスのうち、ローカル接続とみなすアドレス範囲に当てはまらないものをsorryに飛ばしたいんだよね? ちがうん?
zvub1123

2018/06/14 04:15

認識としては、おっしゃる通り、 (メンテナンスのため)ローカル接続以外をsorryに飛ばしたいという目的です。 RewriteCond %{REMOTE_ADDR} !^(ローカル接続)$ という書き方は、書式として間違っているという事ですか?
退会済みユーザー

退会済みユーザー

2018/06/14 04:42 編集

IPアドレスのドットは、正規表現で任意の一文字に一致してしまうため、 実文字であることを示すためにバックスラッシュ「\」でエスケープする必要があります。 ローカルと言っているのが、127.0.0.1のことなのか、192.168.11.1/24の範囲なのか、192.168.11.39オンリーのことなのかが曖昧で混乱している私です。
zvub1123

2018/06/14 05:41

なるほど、エスケープする必要があったんですね。ご指摘ありがとうございます。 質問に記載していた「ローカル」という単語については、192.168.11.39 のみを意味しています。 言葉足らずですみません。。。改めてまとめますと、 ・Apacheを起動しているサーバ自身からは通常通りの画面が閲覧できる ・同ネットワーク内(192.168.11.0/24)の別IP、もしくは外部からの接続に関してはsorryにリダイレクトさせたい という状況です。
退会済みユーザー

退会済みユーザー

2018/06/14 05:49

別のミスもありそうなので、回答内に追記しました。
zvub1123

2018/06/14 09:11

ありがとうございます。 ご教示いただいたURLも参照しつつ、質問文の追記部分の様な状態に変更した(.htaccess は使わず、httpd.conf 内に記載した) のですが、 ローカルホスト(192.168.11.3のIPをもつホスト)と外部からの接続が、いずれもSorryページにリダイレクトされてしまいます。 [OR] を行末に追記すると "500 Internal ServerError" になってしまいます。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問