みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

特定のページだけ認証をかけたい

このページだけ認証をかけたいのにすべてのページにかかってしまします。
domeinname/html/charge.html

下記のようにしたのですがどこが間違っているのでしょうか?

AuthUserFile /var/www/vhosts/domeinname/httpdocs/.htpasswd
AuthGroupFile /dev/null
AuthName "Input ID and Password."
AuthType Basic
require valid-user
<Files html/charge.html>
require valid-user
</Files>

・また下記のようにさらにいくつかのページをそれぞれ別のPWにするなどと考えると、htaccsessではもう無理でしょうか?
domeinname/html/charge2.html
domeinname/html/charge3.html

その後下記のようにしたのですがこちらで正しいでしょうか?
AuthUserFile /var/www/vhosts/domeinname/httpdocs/.htpasswd
AuthGroupFile /dev/null
AuthName "Input ID and Password."
AuthType Basic
require all granted
<Files html/charge.html>
require valid-user
</Files>
<Files html/charge2.html>
require valid-user
</Files>
<Files html/charge3.html>
require valid-user
</Files>

投稿日時 - 2019-06-26 13:51:57

QNo.9629337

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

「require user passwdのid名」
の部分が気になりました。
require user までは 決まり文句で、この通りに記述して
そのあとは、.htpasswdファイルに記述されているこのファイルにアクセス権限を与えたいIDです。
”passwdのid名”というのが、.htpasswdファイル中のID のことなら
これで問題ないです。

しかし、さすがに「なにも表示されません」だけでは原因を
絞り込める方はいなかと思われます。
なににアクセスしたらどういうメッセージが表示されたとか
その時のサーバーのエラーログには、どう記録されているとか
使っているサーバーのマニュアルを呼んで使える機能なのかとか
確認して丁寧に原因を絞り込んでいくしかないです。

エラーログを見ても具体的にエラー内容を書いていないようなら、
たとえば、
.htaccessをこう変えたらどうなったとか、
.htaccessに記述した.htpasswdファイルのパスがあってるかとか
.htpasswdファイルの中身は正しいのかとか
対象のhtmlファイルはサーバー上に存在しているのかとか
.htaccessファイルでのBASIC認証の指定がどこまでできるサーバーなのかとか
そもそも.htaccessファイル自体が使えるサーバーなのかとか
そいう情報を知っているのは あなただけなので
そうやって絞り込んでいかれてはどうでしょうか。

投稿日時 - 2019-06-29 20:14:26

補足

ありがとうございます。お返事遅れてすいません。
仕事が忙しくなってしまったのでしばらくお時間ください。
またお返事します。

投稿日時 - 2019-07-03 15:59:30

ANo.2

> htmlフォルダの中にhtmlファイルがあるのに、相対パスで記載する必要がないのですか?

そうです。
この.htaccessファイルをおいたディレクトリ下の
どの階層にあるファイルでも、ファイル名としてマッチするものがあれば、
対象となります。

投稿日時 - 2019-06-29 14:38:13

補足

# === 有料ぺージなどの認証 ================================
AuthUserFile /home/users/1/chu.jp/web/.htpasswd
AuthName "Input ID and Password."
AuthType Basic
<Files charge.html>
require user passwdのid名
</Files>
<FilesMatch "^¥.ht">
Order allow,deny
Deny from all
</FilesMatch>



教えていただいたことを参考にこのようにしましたが、何の反応もありません。

どこか間違っているでしょうか?

投稿日時 - 2019-06-29 18:21:19

お礼

そうなんですね。ありがとうございました。

相対パスで記載するとむしろうまくいかないのですね。

投稿日時 - 2019-06-29 15:01:33

ANo.1

AuthUserFile /var/www/vhosts/domeinname/httpdocs/.htpasswd
AuthGroupFile /dev/null  <<★4
AuthName "Input ID and Password."
AuthType Basic
require valid-user    <<★1
<Files html/charge.html> <<★2
require valid-user  <<★3
</Files>

とありますが

(1)
上記の★1の行があるので、
この.htaccessを設置したディレクトリの階層以下の全てのページへのアクセスに対して
BASIC認証が必要であることを指定していて、これが
「すべてのページにかかってしまします。」の原因です。

なので、この行を削除してしまいましょう。
(apache2.4以上なら ここをrequire all grantedとしてもよいですけど)

(2)
★2の記述ですが
<Files ~では ファイル名の部分を記述するので
<Files html/charge.html>
でなく
<Files charge.html>
と記述します。

もし、htmlディレクトリ以外にも、charge*.htmlがあって そっちは認証不要にしたい
ということなら、この記述のある.htaccessごと htmlディレクトリに移動させます。

(3)
ファイルごと(ページごと)に認証ユーザーとパスワードを切り替えたいなら
★3の部分をファイルごとに切り替わるように
<Files charge.html>
require user user名1
</Files>
<Files charge2.html>
require user user名2
</Files>
<Files charge3.html>
require user user名3
</Files>
として、それぞれのアクセス権限を与えるユーザー名を切り替えます。
(require valid-user と記載すると、認証できた全てのユーザーにアクセス権限を与えることになりますので)

なお、当然のことながら、
.htpasswdファイルには、この3つのuser名を作って
それぞれ個別のパスワードを設定しておくことになります。

(4)
それと ★4のAuthGroupFile があるとエラーするサーバーがありますが
/dev/nullを指定ということは不要ということなので、
これごと削除してしまってよいでしょう。


(5)
.htaccessや.htpasswdファイルを、悪意のあるユーザーがWebアクセスして
取り出せてしまわないように、以下を記述して守っておく必要があります。
(サーバー側でやってくれている場合もありますが、念のため)
<FilesMatch "^¥.ht">
Order allow,deny
Deny from all
</FilesMatch>


まとめると
-------
AuthUserFile /var/www/vhosts/domeinname/httpdocs/.htpasswd
AuthName "Input ID and Password."
AuthType Basic
<Files charge.html>
require user member1
</Files>
<Files charge2.html>
require user member2
</Files>
<Files charge3.html>
require user member3
</Files>
<FilesMatch "^¥.ht">
Order allow,deny
Deny from all
</FilesMatch>

っことになるでしょう。

投稿日時 - 2019-06-28 12:50:33

お礼

>>>
(2)
★2の記述ですが
<Files ~では ファイル名の部分を記述するので
<Files html/charge.html>
でなく
<Files charge.html>
と記述します。

もし、htmlディレクトリ以外にも、charge*.htmlがあって そっちは認証不要にしたい
ということなら、この記述のある.htaccessごと htmlディレクトリに移動させます。
>>>

こちらの件ですが、htmlフォルダの中にhtmlファイルがあるのに、相対パスで記載する必要がないのですか?
自動的に、すべてのhtmlファイルを確認して、同じファイル名のhtmlファイルを自動認識してくれるのでしょうか?

そうでないと、相対パスで記載しないと、認識できないはずですよね。

ちなみに同じhtmlファイルは一つしかありません。


詳細なご回答大変ありがとうございました。

投稿日時 - 2019-06-29 14:08:19

あなたにオススメの質問