Puncte:3

.htaccess - Excludeți folderul de la protecția de bază de autentificare

drapel id

Am un site web în care nimeni nu are voie să intre fără a introduce acreditările de bază de autentificare.

Totuși, am nevoie ca folderul media să fie accesibil de toată lumea, deoarece folosim o extensie terță parte care creează PDF-uri și le putem testa pe deplin doar dacă media este accesibilă.

Dosarul media este la /var/www/company/pub/media.

Domeniul (www.example.com) arata spre /var/www/company/pub, asa ca cârciumă folderul este punctul de intrare.

Aceasta este încercarea mea .htaccess (/var/www/company/.htaccess):

RewriteEngine activat
RewriteCond %{REQUEST_URI} !^/pub/
RewriteCond %{REQUEST_URI} !^/setup/
RewriteCond %{REQUEST_URI} !^/update/
RewriteCond %{REQUEST_URI} !^/dev/
RewriteRule .* /pub/$0 [L]
DirectoryIndex index.php

AuthType Basic
AuthName „Protejat”
AuthUserFile „/var/www/company/.htpasswd”

# Excludeți folderul media din autentificarea de bază
SetEnvIf Request_URI „^/media/*” media

Comanda permite, refuza
Necesită utilizator valid
Permite de la env=media
Deny de la env=!media
Satisface orice

Dar dacă încerc să sun http://www.example.com/media/someimage.jpg apoi primesc în continuare promptul de autentificare de bază.

Mediu inconjurator:

Apache 2.4.41 (Ubuntu)

Puncte:5
drapel in

Plasați un fișier .htaccess în folderul media cu AuthType Nici unul.

AuthType Nici unul
Solicitați toate acordate
Black avatar
drapel id
A funcționat ca un farmec, mulțumesc!
Puncte:1
drapel kz
# Excludeți folderul media din autentificarea de bază
SetEnvIf Request_URI „^/media/*” media

Comanda permite, refuza
Necesită utilizator valid
Permite de la env=media
Deny de la env=!media
Satisface orice

Acest lucru ar fi funcționat, cu excepția faptului că regex este greșit în SetEnvIf directivă, deci env var mass-media nu este setat la cerere /media/someimage.jpg. Îți lipsește un punct înainte de * cuantificator, adică. ^/media/.*. Cu toate acestea, puteți elimina pur și simplu următorul * cu totul, adică. ^/media/, care este efectiv același (și mai eficient).

The Deny de la env=!media directiva este de prisos.

Deci, ar trebui să funcționeze următoarele:

# Excludeți folderul media din autentificarea de bază
SetEnvIf Request_URI „^/media/” media

Necesită utilizator valid
 
Comanda permite, refuza
Permite de la env=media
Satisface orice

CU toate acestea, aceasta utilizează directive Apache 2.2 depreciate. Pe Apache 2.4, puteți face următoarele:

# Excludeți folderul media din autentificarea de bază
SetEnvIf Request_URI „^/media/” media

Necesită utilizator valid
Necesită medii de mediu

The Mod implicit containerul este <RequireAny> - deci nu trebuie să includeți asta. Deși poți fi explicit dacă vrei:

<RequireAny>
    Require valid-user
    Require env media
</RequireAny>

Alternativ, puteți înconjura întregul bloc de autorizare într-un <If> expresie. De exemplu:

# Protejează totul cu parolă, cu excepția subdirectorului „/media/”.
<Dacă „%{REQUEST_URI} !~ m#^/media/#">
    AuthType Basic
    AuthName „Protejat”
    AuthUserFile „/var/www/company/.htpasswd”
    Necesită utilizator valid
</Dacă>

Operatorul !~ este o potrivire a expresiei regulate negate.

Black avatar
drapel id
Frumos, am incercat si totul merge. În schimb, accept răspunsul dvs., deoarece conține mai multe detalii utile și arată de ce încercarea mea a eșuat.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.