- 締切済み
特定のページだけ認証をかけたい
このページだけ認証をかけたいのにすべてのページにかかってしまします。 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>
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- superside0
- ベストアンサー率64% (461/714)
「require user passwdのid名」 の部分が気になりました。 require user までは 決まり文句で、この通りに記述して そのあとは、.htpasswdファイルに記述されているこのファイルにアクセス権限を与えたいIDです。 ”passwdのid名”というのが、.htpasswdファイル中のID のことなら これで問題ないです。 しかし、さすがに「なにも表示されません」だけでは原因を 絞り込める方はいなかと思われます。 なににアクセスしたらどういうメッセージが表示されたとか その時のサーバーのエラーログには、どう記録されているとか 使っているサーバーのマニュアルを呼んで使える機能なのかとか 確認して丁寧に原因を絞り込んでいくしかないです。 エラーログを見ても具体的にエラー内容を書いていないようなら、 たとえば、 .htaccessをこう変えたらどうなったとか、 .htaccessに記述した.htpasswdファイルのパスがあってるかとか .htpasswdファイルの中身は正しいのかとか 対象のhtmlファイルはサーバー上に存在しているのかとか .htaccessファイルでのBASIC認証の指定がどこまでできるサーバーなのかとか そもそも.htaccessファイル自体が使えるサーバーなのかとか そいう情報を知っているのは あなただけなので そうやって絞り込んでいかれてはどうでしょうか。
- superside0
- ベストアンサー率64% (461/714)
> htmlフォルダの中にhtmlファイルがあるのに、相対パスで記載する必要がないのですか? そうです。 この.htaccessファイルをおいたディレクトリ下の どの階層にあるファイルでも、ファイル名としてマッチするものがあれば、 対象となります。
お礼
そうなんですね。ありがとうございました。 相対パスで記載するとむしろうまくいかないのですね。
補足
# === 有料ぺージなどの認証 ================================ 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> 教えていただいたことを参考にこのようにしましたが、何の反応もありません。 どこか間違っているでしょうか?
- superside0
- ベストアンサー率64% (461/714)
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> っことになるでしょう。
お礼
>>> (2) ★2の記述ですが <Files ~では ファイル名の部分を記述するので <Files html/charge.html> でなく <Files charge.html> と記述します。 もし、htmlディレクトリ以外にも、charge*.htmlがあって そっちは認証不要にしたい ということなら、この記述のある.htaccessごと htmlディレクトリに移動させます。 >>> こちらの件ですが、htmlフォルダの中にhtmlファイルがあるのに、相対パスで記載する必要がないのですか? 自動的に、すべてのhtmlファイルを確認して、同じファイル名のhtmlファイルを自動認識してくれるのでしょうか? そうでないと、相対パスで記載しないと、認識できないはずですよね。 ちなみに同じhtmlファイルは一つしかありません。 詳細なご回答大変ありがとうございました。
補足
ありがとうございます。お返事遅れてすいません。 仕事が忙しくなってしまったのでしばらくお時間ください。 またお返事します。