Sto lavorando su un sito Wordpress e le mie pagine utilizzano una struttura permalink che mod_rewrites per apparire come directory. Per alcune pagine voglio utilizzare l'autenticazione di base per proteggere con password alcune pagine. Come scriverei questo nel mio file .htaccess? Sto proteggendo il file o l'indirizzo riscritto?.htaccess, mod_rewrite e autenticazione di base
risposta
Non sarà necessario mod_rewrite per questo, si spera, questo dovrebbe fare il trucco:
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
Il mod_auth e moduli mod_env dovrebbero avere precidence sopra mod_rewrite, quindi la struttura delle directory falso dovrebbe rimanere lo stesso . Dovresti solo compilare uno SetEnvIfNoCase Request_URI ^/some/path/to/protect require_auth=true
per ciascuno, quindi compilare il resto delle cose dell'author in base alle tue esigenze.
Beh, non capisco completamente perché l'abbia fatto, ma ... l'ha fatto! Grazie mille! Stavo sudando per metà giornata! – Imaginary
@Imaginary In sostanza, se la variabile di ambiente 'require_auth' è * non * impostata, non è necessario l'autenticazione. Le direttive 'SetEnvIfNoCase' nella parte superiore impostano tale variabile se la richiesta riguarda determinate directory (che esistano o meno). –
Penso di averlo capito! Molto chiaro. Grazie ancora! – Imaginary
L'unico problema che ho con questa soluzione è che facendo clic sul pulsante Annulla verrà visualizzata la pagina protetta. Ho cercato di risolvere questo problema utilizzando:
RewriteCond %{REMOTE_USER} !user
RewriteRule ^/protected-page /unauthenticated-page [R=401]
Ma che non ha funzionato. Non sono sicuro del perché.
per risolvere il problema rapido e sporco ho aggiunto
ErrorDocument 401 "You don't have access."
Per creare un reindirizzamento ho usato questo
ErrorDocument 401 '<html><head><meta http-equiv="refresh" content="0; url=/unauthenticated-page" /></head><body></body></html>'
Per coloro che sono venuti qui con lo stesso problema, come me, con .htaccess come questo
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>
norme di cui sopra non funzionano come mi aspettavo (l'autorizzazione, quindi riscrivere)
a causa della direttiva fusione fine ("Se" si fonde scorso)
grazie alla comment from Alek farlo notare
così quando ho rimosso parentesi IfModule, le regole hanno cominciato a lavorare per me.
L'unica cosa che si è avvicinata ad avere successo è che ho creato una directory con lo stesso nome dell'URL amichevole (cioè/friendlyurl /) e ho inserito un file .htaccess in là per richiedere l'autenticazione. Andando alla pagina, mi è stato chiesto per le credenziali e poi inviato a un errore Proibito 403. – Imaginary