0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

.htaccessで特定パスへのIP制限を設定する方法

Posted at

htaccessを使って特定パスへのIP制限を実行するのにかなり詰まったので紹介します!
ちなみにApacheは2.4を使用しています。

例えば以下のような例です。

  • https://zakki/profile(公開ページ) → 全員アクセス可能
  • https://zakki/profile/admin(管理ページ) → 管理者のみアクセス権限を付与

上記のように公開ページと管理ページでアクセス権限を分ける場合は以下のように設定すればOKです。
※Xの部分はIPアドレスです。

.htaccess
<If "%{REQUEST_URI} =~ /admin/">
    Require all denied
    Require ip xxx.xxx.xxx.xx
</If>

上記のようにifディレクティブを使うことでadminを含むパスへのアクセス制限ができるようになりました。
それでは詳しく解説していきます。

ifディレクティブはapache2.4以降のバージョンしか使えないのでご注意ください。
公式サイトはこちら

詰まった原因

詰まった原因の大きな原因は前提知識が乏しいことはもちろんなんですが、特定パスに特定IPのみにアクセス許可を行うことを紹介している記事を見つけられなかったことが挙げられます。

基本情報をもとに実装するなら以下2つのディレクティブが有力候補にあがりました。

  • Location
  • LocationMatch

上記を使えば特定パスを含むURLへのアクセス制限をかけることができます。
公式サイトはこちら

なので、「上記のディレクティブを使えば簡単にアクセス制限できるでしょ!」くらいのつもりでいましたが、どれだけ頑張ってもアクセス制限できることはありませんでした。500エラーの嵐です。
例えば以下のような例です。

.htaccess
<LocationMatch ~ "/admin/">
    Require all denied
    Require ip xxx.xx.x.x
</LocationMatch>

正規表現を修正してみたり、ディレクティブを変えてみたりと試行錯誤しましたが、最終的にはifディレクティブを使うことで落ち着きました。

まとめ

真実はさておきhtaccessにLocationは使えないと紹介しているも記事もありました。
もしLocationを使ってうまく実装できない場合はifディレクティブを使って実装してみてください!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?