So entfernen Sie den .htaccess-Kennwortschutz aus einem Unterverzeichnis

95

Ich habe meine gesamte Website mit einem Passwort geschützt .htaccess, möchte jedoch eines der Unterverzeichnisse verfügbar machen, damit es ohne Passwort angezeigt werden kann.

Wie kann ich den htaccess-Kennwortschutz für ein Unterverzeichnis deaktivieren? Speziell was ist die .htaccessSyntax.

Hier ist meine .htaccessDatei, die sich im Stammverzeichnis meines FTP befindet.

AuthName "Site Administratrion"
AuthUserFile /dir/.htpasswd
AuthGroupFile / dev / null

AuthName sicher
AuthType Basic
Benötigen Sie den Benutzernamen1
bestellen erlauben, verweigern
von allen erlauben
justinl
quelle
4
Dies ist möglicherweise besser für Serverfehler geeignet.
beginnt

Antworten:

152

Sie müssen eine neue .htaccessDatei im erforderlichen Verzeichnis erstellen und die Satisfy anyDirektive wie folgt einfügen, bis zu Apache 2.3:

# allows any user to see this directory
Satisfy Any

Die in Apache 2.4 geänderte Syntax hat den gleichen Effekt:

Require all granted
RageZ
quelle
7
Ich konnte dies nur mit an der Arbeit Allow from allnicht Satisfy Any.
Jess Telford
@ JessTelford gute Verwendung des Code-Snippets. @RageZ +1 für die Antwort, die für mich funktioniert hat. Könnten Sie die Antwort so bearbeiten, dass sie sehr einfach ist, und sie mit der Code-Snippet-Methode veröffentlichen? Sonst muss jemand nachdenkenthanks
Jesse Burcsik
2
@ JessTelford Satisfy Anyarbeitet und es wurde falsch geschrieben als Satisify Any. Vielleicht hat das bei Ihnen nicht funktioniert.
BlueBird
1
Ich musste eine einzelne Datei ungeschützt haben (alles andere geschützt), die im Abschnitt <Dateien>
Nick
Das funktioniert bei mir nicht - ich bekomme immer noch das Passwort modal, das nach Benutzername und pwd fragt. Mit Firefox & Windows 7 ... Hat jemand eine Idee?
ItsMeDom
36

Als Ergänzung zu RageZs Antwort habe ich dies in den Server-Anweisungen verwendet:

<Directory /var/www/protected/>
     AuthType Basic
     AuthName "Production"
     AuthUserFile /path/to/.htpasswd
     Require valid-user
</Directory>

<Directory /var/www/protected/unprotected>
     Satisfy Any
</Directory>

Genial. Danke RageZ!

atonyc
quelle
9

Erstellen Sie .htaccessmit dieser Anweisung einfach ein neues im gewünschten Unterverzeichnis:

Allow from all

Sie können Ihre IP nur einschränken mit:

Allow from x.x.x.x

Siehe: http://httpd.apache.org/docs/current/mod/mod_access_compat.html

Paul Rad
quelle
Es hat funktioniert, wenn ich "Alle erforderlich" anstelle von "Von allen zulassen" und "Alle zufrieden stellen" gesetzt habe. Diese beiden haben bei mir nicht funktioniert. Ich bin auf Apache 2.4.
Endo64
1

Sie müssen dem Unterverzeichnis eine weitere .htaccess-Datei hinzufügen, die die Authentifizierung überschreibt. .htaccess kaskadiert nach oben, dh es wird im aktuellen Ordner angezeigt und steigt dann eine Ebene höher und so weiter.

Fenton
quelle
4
Kennst du zufällig die Syntax? Ich verstehe das Konzept, weiß aber nicht, wie ich es umsetzen soll.
Justin
Wenn Sie die aktuelle entfernen und keine Berechtigungen verwenden möchten, ersetzen Sie sie einfach durch eine leere Datei mit dem Namen .htaccess
Gaʀʀʏ
3
@Garry So funktioniert die .htaccess-Kaskadierung nicht. Sie müssen Optionen explizit überschreiben.
William Denniss
1

Hier ist eine Möglichkeit, das Unterverzeichnis "foo" über die Basisauthentifizierung aus der Hauptdatei .htaccess auf einer Site zuzulassen:

AuthType Basic
AuthName "Password Required"
AuthUserFile /dir/.htpasswd
Require expr %{REQUEST_URI} =~ m#^/foo/#
Require valid-user

Hinweis: Dies funktioniert in Apache 2.4. Ich habe für frühere Versionen nicht bestätigt.

PeterA
quelle
0

Wenn Sie verhindern möchten, dass eine bestimmte Direktive die htaccess-Authentifizierung durchführt, können Sie oben in Ihrer htaccess-Datei den folgenden Code verwenden.

AuthType Basic AuthName "Enter Pass" AuthUserFile /home/public_html/.htpasswd /*PATH TO YOUR .htpasswd FILE*/ Require valid-user SetEnvIf Request_URI "(/DIRECTORY_NAME/)$" allow Order allow,deny Allow from env=allow

Auch wenn Sie mehrere Verzeichnisse verhindern möchten, fügen Sie hinzu

SetEnvIf Request_URI "(/DIRECTORY_NAME/)$" allow

Sie möchten so viele Verzeichnisse wie möglich aus der Zugriffsverhütung entfernen.

Mohd Jafar
quelle