Ich arbeite an einer Wordpress-Site, und meine Seiten verwenden eine Permalink-Struktur, die mod_rewrites sie aussehen wie Verzeichnisse. Für einige Seiten möchte ich die Basis-Authentifizierung verwenden, um einige der Seiten mit einem Passwort zu schützen. Wie würde ich das in meine .htaccess-Datei schreiben? Schütze ich die Datei oder die neu geschriebene Adresse?.htaccess, mod_rewrite und Basisauthentifizierung
Antwort
Sie werden nicht mod_rewrite dafür brauchen, hoffentlich, das den Trick tun sollten:
SetEnvIfNoCase Request_URI ^/some/path/to/protect require_auth=true
SetEnvIfNoCase Request_URI ^/another/protected/path require_auth=true
# Auth stuff
AuthUserFile /var/www/htpasswd
AuthName "Password Protected"
AuthType Basic
# Setup a deny/allow
Order Deny,Allow
# Deny from everyone
Deny from all
# except if either of these are satisfied
Satisfy any
# 1. a valid authenticated user
Require valid-user
# or 2. the "require_auth" var is NOT set
Allow from env=!require_auth
Die mod_auth und mod_env Module sollte precidence über mod_rewrite haben, so dass Ihre gefälschte Verzeichnisstruktur gleich bleiben sollte . Sie müssen nur eine SetEnvIfNoCase Request_URI ^/some/path/to/protect require_auth=true
für jeden ausfüllen, dann füllen Sie den Rest der Auth-Zeug nach Ihren Bedürfnissen.
Nun, ich verstehe nicht ganz, warum das so war, aber ... das war's! Ich danke dir sehr! Das schwitzte ich den halben Tag! – Imaginary
@Imaginary Wenn die Umgebungsvariable 'require_auth' * nicht * gesetzt ist, ist keine Authentifizierung erforderlich. Die 'SetEnvIfNoCase'-Direktiven am Anfang legen diese Variable fest, wenn die Anfrage für bestimmte Verzeichnisse gilt (ob sie existieren oder nicht). –
Ich denke, ich habe es! Sehr deutlich. Danke noch einmal! – Imaginary
Das einzige Problem, das ich mit dieser Lösung habe, ist, dass durch Klicken auf die Schaltfläche Abbrechen die geschützte Seite angezeigt wird. Ich versuchte, dies zu lösen, indem ich verwendete:
RewriteCond %{REMOTE_USER} !user
RewriteRule ^/protected-page /unauthenticated-page [R=401]
Aber das hat nicht funktioniert. Ich bin mir nicht sicher warum.
Um das Problem schnell zu lösen und schmutzig Ich habe
ErrorDocument 401 "You don't have access."
Um eine Umleitung ich diesen Für diejenigen
ErrorDocument 401 '<html><head><meta http-equiv="refresh" content="0; url=/unauthenticated-page" /></head><body></body></html>'
, die mit dem gleichen Problem wie ich hierher gekommen, verwendet zu schaffen, mit .htaccess wie folgt aus
AuthType Basic
AuthName "some_name"
AuthUserFile "/path/to/password/passwd"
require valid-user
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
oben genannten Regeln arbeiten nicht wie ich erwartet hatte (genehmigen, dann neu schreiben)
wegen Richtlinie verschmelzenden Ordnung („If“ ist letzte fusionierte)
dank comment from Alek darauf hinweisen, dass
so, wenn ich IfModule Klammern entfernt, haben die Regeln begonnen, für die Arbeit mich.
Die einzige Sache, die fast zum Erfolg kam, ist, ich habe ein Verzeichnis mit dem gleichen Namen wie die freundliche URL (d. H./Friendlyurl /) und legen Sie eine .htaccess-Datei dort für die Authentifizierung. Auf die Seite gehend, wurde ich nach Anmeldeinformationen gefragt und dann an einen Fehler 403 Verboten gesendet. – Imaginary