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

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

ただいまの
回答率

90.50%

  • Apache

    1819questions

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

  • HTTP

    548questions

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

.htaccess での IP制限について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 222

atuYamaY

score 119

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>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+3

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/14 12:24

    ラクそうですね。

    キャンセル

checkベストアンサー

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 11: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 12:23

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

    キャンセル

  • 2018/06/14 13:15

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

    キャンセル

  • 2018/06/14 13:41 編集

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

    キャンセル

  • 2018/06/14 14:41

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

    キャンセル

  • 2018/06/14 14:49

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

    キャンセル

  • 2018/06/14 18:11

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

    キャンセル

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Apache

    1819questions

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

  • HTTP

    548questions

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