Apache認証:サブディレクトリへのパブリックアクセスを許可します


13

これはおそらく単純な問題ですが、ドキュメントで解決策を見つけることができません。

BASIC認証を使用してWebサイトをパスワードで保護します。しかし、サブディレクトリは保護されないようにしたい:

http://mysite.com/ -> BASIC protected
http://mysite.com/somedir -> BASIC protected
http://mysite.com/someotherdir -> BASIC protected
http://mysite.com/public -> not protected

すべてのサイトを保護するのに問題はありませんが、1つのディレクトリを「保護解除」する方法を知りません。このサイトは共有ホストでホストされているため、設定を行うために.htaccessファイルにのみアクセスできます。

認証を無効にするディレクティブはありますか?

助けてくれてありがとう ...


これが最も正しいソリューションのようです:stackoverflow.com/questions/2641646/…–
BryanK

回答:


10

ホストが許可した内容に応じて、.htaccessに問題はありません。

次のようにサブフォルダーに.htaccessを配置してみてください。ただし、その中のディレクトリに対してオーバーライドを有効にする必要があります。

 Allow From All
 Satisfy Any

1
ここでの秘密のソースであるIIRCは、.htaccessをサイトのルートに配置することですが、Cylindricが述べているように、その.htaccessファイルにエントリがあります。
ポールラスロップ

.htaccessが使用されるように、AllowOverrideを追加する(または存在することを確認する)ことを忘れないでください。
TCampbell 09

1
@ポール-私は答えを削除しましたが、AFAICR Cylindricの答えは現在間違っていますか?サブディレクトリ内の.htaccessファイルは、上位の1つを上書きできません。ただし、親ディレクトリの.htaccessファイルには、サブディレクトリのコントロールを含める(または実際に削除する)こともできます。
アルニタック

ルートフォルダーとパブリックにしたいフォルダーの両方に<Directory />ディレクティブを入れてみましたが、どちらの場合もHTTP 500を取得しました。他のアイデアはありますか?
ギヨーム

1
.htaccessでは<Directory>を使用できませんが、<Files>および<Location>を使用できます
-Alnitak

7

パスserver.com/private/publicの場合:

server.com/private/.htaccess

AuthType Basic
AuthName "Private, keep out."
Require...

server.com/private/public/.htaccess

Allow From All
Satisfy Any

ここで重要なのは、上流からの要件をORする「すべてを満たす」です。「すべてを満たす」がデフォルトです。


「満足」を説明するためのThx👍–
マリオ

1

私はこれがそれをするかもしれないと信じています:

# put the global auth stuff here
...

# put the override here
<Location /public>
Allow from All
Satisfy Any
</Location>

アクセス制御に<Location>を使用することは決して良い考えではありません。リソース自体ではなく、名前によるアクセスのみを制御します。したがって、別の名前(エイリアスなど)を介してアクセスを提供するものには、アクセス制御が適用されません。
CK。

1
@CK実際には、問題の場所が物理ディレクトリではなく、mod_rewriteのようなものに変装した「仮想」ディレクトリである場合、Locationを使用する必要があります。
ナタリーアダムス

0

私はこれをやってこれを解決することができました:

<Directory "/path/to/maindirectory">
[... auth stuff ... ]
</Directory>

<Directory "/path/to/mysubdirectory">
 Allow from All
 Satisfy Any
</Directory>

場所は大文字と小文字を区別するように作られており、実際のフォルダアクセスではなく、URL上でのみ機能するため、場所は使用しないでください。

だから、例えば、私が書いたら

http:/mywebsite/STUFF

または

http://mywebsite/stuff

または

http://mywebsite/StUfF

呼び出される物理ディレクトリが同じであっても、ロケーションコントロールでは異なります!!!

要するに、あなたはディレクトリ「もの」へのアクセスをチェックし、私は異なるケースでそれを書くことができます。

また、単一のディレクトリで.htaccessファイルを使用して、他のユーザーの場所を制御しても、うまくいきませんでした。

それが役に立てば幸い。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.