ワードプレスを使って商品一覧ページを作っているけれど、
商品ページが変更になった、商品がなくなった。
商品一覧ページから該当ページを削除すればよいのですが、・・・・・
やり方がわからない。
理由:作った人がやめた。ワードプレスよくわからない。
※依頼理由のNO1です。
で、
1 商品一覧ページのうち、すでにない商品のページをクリックしたときだけ、ベーシック認証をかけてほしい
2 商品一覧ページのうち、作成中のページをクリックしたときもベーシック認証をかけてよしい
こんなときは
特定のURLを含むページのみベーシック認証をかけるで対応しました。
前提
・環境はさくらのレンタルサーバー
・.htaccessを使う
・ワードプレスでURLが自動生成されている
結論
URLにmenuとdevが含まれているときはベーシック認証がかかる
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のところはなんとなくの記述なので、ご指摘があればお願いいたします。