2012-08-30 5 views
5

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

+0

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

risposta

7

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.

+0

Beh, non capisco completamente perché l'abbia fatto, ma ... l'ha fatto! Grazie mille! Stavo sudando per metà giornata! – Imaginary

+0

@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). –

+0

Penso di averlo capito! Molto chiaro. Grazie ancora! – Imaginary

0

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>' 
0

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.