LoginSignup
1
0

More than 3 years have passed since last update.

特定のページ(URL)のみベーシック認証をかける(アドレスでベーシック認証)

Last updated at Posted at 2020-08-30

ワードプレスを使って商品一覧ページを作っているけれど、
商品ページが変更になった、商品がなくなった。

商品一覧ページから該当ページを削除すればよいのですが、・・・・・
やり方がわからない。
理由:作った人がやめた。ワードプレスよくわからない。
※依頼理由のNO1です。

で、
1 商品一覧ページのうち、すでにない商品のページをクリックしたときだけ、ベーシック認証をかけてほしい
2 商品一覧ページのうち、作成中のページをクリックしたときもベーシック認証をかけてよしい

こんなときは
特定のURLを含むページのみベーシック認証をかけるで対応しました。

前提
・環境はさくらのレンタルサーバー
・.htaccessを使う
・ワードプレスでURLが自動生成されている

結論
URLにmenuとdevが含まれているときはベーシック認証がかかる

.htaccessベーシック認証 
1 DirectoryIndex index.html index.htm index.shtml index.php index.cgi
2 Options -Indexes
3 AuthUserFile /home/〇〇〇/www/〇〇〇/ridirect/.htpasswd
4 AuthType Basic
5 AuthName "Web access"
6 Require valid-user
7 SetEnvIf Request_URI "(menu|dev)" auth_chk
8 Satisfy any
9 Order deny,allow
10 Deny from env=auth_chk

③と⑦を変えれば動きます。

①~⑥

さくらのレンタルサーバーの初期値なのでこちらの説明を参考に

7 SetEnvIf Request_URI "(menu|dev)" auth_chk

URLにmenuかdevが含まれていたら、変数auth_chkに1を設定する

7-1 SetEnvIfの使い方

SetEnvIt ① ② ③

①ここには リクエストを表す値を設定します。
設定できる値は決まっていて、値は↓記載の公式サイトで確認できます。

今回はURLを取得したいので
Request_URIになります。

その他、
Remote_Addr・・・リクエストを行なっているクライアントの IP アドレス
などたくさんあります。

参考:SetEnvIf Apache公式サイト
http://httpd.apache.org/docs/2.2/ja/mod/mod_setenvif.html#setenvif

②ここには正規表現を書きます。
今回は単純に menuかdevが含まれている場合なので(menu|dev) にしました。

③ ①と②の条件を満たす場合 変数を設定する
今回はURLにdevもしくはmenuが含まれる場合変数auth_chkに1を設定しています。
・変数名は自由
・変数に値を設定していない場合は1が設定される
※auth_chkが決まった変数名に思えますが、これは自由に設定した変数名です。

8 Satisfy any

AuthUserFile /home/〇〇〇/www/〇〇〇/ridirect/ 以下にアクセスしてもベーシック認証のダイアログがでてこないようにする。

8-1 Satisfy any

ホストによる制御
ユーザー認証による制御
どちらかを満たしていればOKということ

今回はさくらのレンタルサーバーなので、
ホストによる制御→海外からのIPアドレス制限
ユーザー認証による制限→特になし

国内からのアクセスのためホストによる制限を満たしている
→ホストによる制御をみたしている
→ホストによる制御、ユーザー認証による制御のどちらか一方を満たしているということで
ベーシック認証のダイアログがでてこなくなります。

※初期値Satisfy all のままだと、ベーシック認証のダイアログがでてきます。

Satisfy Apache公式サイト:
https://httpd.apache.org/docs/2.4/ja/mod/mod_access_compat.html#satisfy

9 Order deny,allow

すべてのアクセスをOKにする。
ここはベーシック認証のダイアログがでてくる、でてこないの話ではなく、
アクセスする権限があるかどうかということ。

ここは混乱しました。
アクセスする権限があるけれど、
あなたはベーシック認証のダイアログにIDとパスワードをいれてね、
あなたはベーシック認証無しでアクセスできるよ
という話のようです。

10 Deny from env=auth_chk

auth_chkの値が1の人はベーシック認証のダイアログを表示する
URLにmenuもしくはdebが含まれている人はauth_chkの値が1です。⑦参照

Q ここででてくるenvってなんんでしょう
これも勝手につかっていいのでしょうか。

A これはDeny、Allowの引数で
環境変数 の存在によりアクセスの制御を行なえるようにするものです。

env=環境変数の形式で使います。
envとは決まった名前です。

今回の場合、 環境変数 auth_chkが存在した場合にリクエストはアクセスを拒否されます。
なので、

Apacheの公式サイト Allowのところに詳しくのっています。
https://httpd.apache.org/docs/2.4/ja/mod/mod_access_compat.html#allow
https://httpd.apache.org/docs/2.4/ja/env.html#using

現在この記述は別のサイトでもコピペされて大活躍しています。
めでたし、めでたし。
Satisfy anyのところはなんとなくの記述なので、ご指摘があればお願いいたします。

■参考サイト追記
https://www.magata.net/memo/index.php?Apache2.4%20%A4%CERequire%A5%C7%A5%A3%A5%EC%A5%AF%A5%C6%A5%A3%A5%D6%A4%C7%A5%A2%A5%AF%A5%BB%A5%B9%C0%A9%B8%E6%A4%F2%B9%D4%A4%A6

1
0
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
1
0