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

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

ただいまの
回答率

90.03%

.htaccess での IP制限について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,250

zvub1123

score 171

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 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.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる