Kako da pomoću .htaccess fajla unapredite rad svog web sajta Idi do glavnog sadržaja

Kako da pomoću .htaccess fajla unapredite rad svog web sajta

.htaccess fajl je konfiguracioni fajl koji se koristi na web serverima koji koriste Apache softver. Ovaj fajl omogućava napredne kontrole pristupa i konfiguraciju web servera na nivou foldera.

Zato ćemo u ovom tekstu detaljnije objasniti šta je to .htaccess fajl i kako ga možete iskoristiti da unapredite bezbednost i funkcionalnost svog web sajta.

.htaccess fajl se obično smešta u root folder web sajta i primenjuje se na sve foldere ispod tog nivoa. Ovaj fajl se često koristi za postavljanje pravila za redirekciju URL-ova, zaštitu foldera lozinkom, sprečavanje pristupa određenim IP adresama ili blokiranje određenih vrsta zahteva.

On je podrazumevano sakriven, pa ukoliko želite da omogućite da bude vidljiv, potrebno je da u opciji Settings (u root folderu vašeg sajta), pod Preferences čekirate box pod nazivom Show Hidden Files (dotfiles).

Najčešći primeri korišćenja .htaccess fajla

Jedna od najčešćih primena .htaccess fajla je redirekcija URL-ova.

Na primer, ako želite da preusmerite sve zahteve za staru verziju web sajta, na novu verziju tog istog sajta, za to možete koristiti .htaccess fajl. Pomoću odgovarajućih Rewrite pravila, možete lako usmeriti posetioce sa starih URL-ova na nove, a da pritom ne ugrozite postojeću indeksaciju tih sajtova u search engine-ima.

Kako smo već pomenuli, pomoću .htaccess fajla možete unaprediti i bezbednost svog web sajta. Na primer, možete zaštititi određene foldere lozinkom, čime se pristup tim resursima omogućava samo autorizovanim korisnicima. Ovo je posebno korisno ako imate folder sa osetljivim podacima ili želite da ograničite pristup određenim delovima web sajta.

.htaccess fajl takođe pruža mogućnost blokiranja pristupa određenim IP adresama ili IP opsezima. Na taj način možete sprečiti pristup sa neželjenih adresa ili određenih regiona. Ovo je korisno ako želite da ograničite pristup svom web sajtu samo sa određene geografske lokacije ili da blokirate određene poznate izvore zlonamernog saobraćaja.

Dodatno, .htaccess fajl vam omogućava i manipulaciju sa HTTP header-ima. Možete dodavati ili uklanjati određene header-e kako biste poboljšali bezbednost, sprečili keširanje resursa ili postavili strože bezbednosne polise za browsere.

Iako je u pitanju veoma koristan fajl, potrebno je da budete oprezni prilikom podešavanja, jer loše konfigurisane ili nepotpune direktive u fajlu mogu uzrokovati probleme na web serveru ili u funkcionalnosti vašeg web sajta.

Zato kao i uvek preporučujemo pravljenje rezervnih kopija originalnog .htaccess fajla pre nego što napravite bilo kakve promene i testiranje novih konfiguracija pre nego što ih primenite na produkcioni sajt.

Primeri praktične primene .htaccess fajla

Evo sada i nekoliko primera praktične primene .htaccess fajla. 

Redirekcija sa www na non-www verziju sajta

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.nekisajt\.rs [NC]
RewriteRule ^(.*)$ http://nekisajt.rs/$1 [L,R=301]

Ovaj primer će redirektovati sve zahteve sa www.nekisajt.rs na nekisajt.rs verziju sajta. Oznaka [NC] u RewriteCond upitu označava “no case” (odnosno ispis bez razlikovanja velikih i malih slova).

Kada se koristi [NC], uslov će biti zadovoljen bez obzira na to da li su slova u HTTP_HOST promenljivoj napisana velikim ili malim slovima. [L] u ovom kodu označava poslednje pravilo koje treba primeniti, dok [R=301] označava trajni redirekt (301 status kod).

Redirekcija sa HTTP na HTTPS verziju sajta

Da biste vršili redirekciju sa HTTP na HTTPS, možete koristiti .htaccess fajl na sledeći način:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Ovaj kod će proveriti da li je HTTPS isključen (HTTP protokol se koristi umesto HTTPS-a) i zatim izvršiti redirekciju na istu URL putanju, ali sa HTTPS protokolom.RewriteEngine On omogućava Apache Rewrite modul koji se koristi za redirekciju.

RewriteCond %{HTTPS} off proverava da li je HTTPS isključen.

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] definiše pravilo redirekcije. ^(.*)$ predstavlja regularni izraz koji odgovara svim URL-ovima, %{HTTP_HOST} sadrži ime hosta iz zahteva, a %{REQUEST_URI} sadrži putanju zahteva. [L,R=301] označava da je ovo poslednje pravilo koje treba primeniti i da se vrši trajna redirekcija sa HTTP status kodom 301.

Ovim kodom, kada posetilac pokuša da pristupi vašem sajtu putem HTTP protokola, biće automatski preusmeren na istu URL putanju, ali sa HTTPS protokolom.

Napomena: Pre primene ovog koda, morate se pobrinuti da je HTTPS konfigurisan i da vaš SSL/TLS sertifikat ispravno instaliran na web serveru.

Zaštita foldera lozinkom

Postoje različiti razlozi zbog kojih možete odlučiti da onemogućite pristup određenom folderu na vašem veb serveru. Evo nekoliko čestih scenarija:

Zaštita osetljivih podataka: Ako u određenom folderu čuvate osetljive podatke, kao što su finansijski podaci, lični podaci ili interni dokumenti, možda želite da onemogućite pristup tom folderu kako biste sprečili neovlašćen pristup ili curenje informacija.

Privatni sadržaj: Ako imate određeni folder sa sadržajem namenjenim samo određenoj grupi korisnika, možda želite da ograničite pristup samo tim korisnicima. To može biti korisno za interne dokumente, premijum sadržaj ili ekskluzivne resurse.

Zaštita izvornog koda: Ako čuvate izvorni kod vaše aplikacije ili web sajta u određenom folderu, možda želite da onemogućite pristup tom folderu kako biste sprečili neovlašćeno pregledanje ili krađu vašeg izvornog koda.

Upravljanje bezbednošću: Onemogućavanje pristupa određenom folderu može biti deo opšte strategije bezbednosti vašeg web sajta. Na primer, možda želite da ograničite pristup admin panelu ili drugim osetljivim delovima sajta samo na određene IP adrese ili korisničke naloge.

Evo primera koda za zaštitu pristupa određenom folderu:

AuthType Basic
AuthName "Zaštićeni folder"
AuthUserFile /lokacija foldera/.htpasswd
Require valid-user

Ovaj primer koda će zaštititi određeni folder lozinkom. "Zaštićeni folder" je poruka koja će se prikazati prilikom zahteva za unos korisničkog imena i lozinke. /lokacija foldera/.htpasswd predstavlja putanju do .htpasswd fajla koji sadrži korisnička imena i heširane lozinke. "Require valid-user" zahteva od korisnika da se autentifikuju kako bi pristupili folderu.

Napomena: Važno je da obezbedite da .htpasswd fajl bude zaštićen i da se nalazi van direktorijuma dostupnih preko web servera. Na taj način će se sprečiti neovlašćen pristup lozinkama.

Blokiranje pristupa prema određenim IP adresama

Postoji nekoliko razloga za blokiranje pristupa određenim adresama na web serveru.

Zaštita od neželjenog saobraćaja: Ako primetite da određena IP adresa ili opseg IP adresa generiše neželjeni ili zlonameran saobraćaj prema vašem web serveru, možete blokirati pristup tim IP adresama kako biste smanjili opterećenje servera i poboljšali performanse.

Zaštita od napada: Ako primetite da određena adresa IP izvodi pokušaje napada, kao što su pokušaji hakovanja, DDoS napadi ili skeniranje ranjivosti, blokiranje te IP adrese može pomoći u sprečavanju takvih napada i održavanju bezbednosti web servera.

Zaštita od neovlašćenog pristupa: Blokiranje određenih IP adresa može biti korisno kako biste sprečili neovlašćen pristup određenim delovima veb sajta ili osetljivim informacijama.

Evo primera koda kojim možete blokirati određene IP adrese:

Order Deny,Allow
Deny from 123.45.67.89
Deny from 987.65.43.21
Allow from all

Ovaj primer koda će blokirati pristup sa IP adresa 123.45.67.89 i 987.65.43.21, dok će dozvoliti pristup svim ostalim adresama. Order Deny, Allow definiše redosled u kojem će se primenjivati pravila.

Onemogućavanje pregleda sadržaja foldera

Options -Indexes

Kada dodate ovaj kod u .htaccess fajl u određenom folderu, web server će onemogućiti prikazivanje liste datoteka i podfoldera ukoliko se pristup tom folderu izvrši putem URL-a.

Na primer, ako imate folder “test” i želite onemogućiti pregled sadržaja tog foldera, kreirajte ili otvorite .htaccess fajl u tom folderu i dodajte liniju “Options -Indexes”. Nakon toga, ako posetite www.nekisajt.rs/test/, web server neće prikazivati listu datoteka i podfoldera tog foldera.

Postavljanje bezbednosnih header-a

Postavljanje bezbednosnih header-a na vašem web serveru je važan korak za poboljšanje bezbednosti i zaštite vašeg web sajta od različitih vrsta napada.

Evo primera koda za postavljanje bezbednosnih header-a:

Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options "nosniff"
Header always append X-Frame-Options SAMEORIGIN

Ovi primeri postavljaju bezbednosne header-e u HTTP odgovorima. Prvi primer aktivira XSS (Cross-Site Scripting) zaštitu, drugi onemogućava MIME type sniffing, a treći postavlja X-Frame-Options na “SAMEORIGIN”, što sprečava ugnježđivanje sajta u iframe elemente sa drugih domena.

Omogućavanje gzip kompresije

gzip kompresija je važna jer smanjuje veličinu prenetih podataka, poboljšava performanse web sajta, pruža bolje korisničko iskustvo i može imati pozitivan uticaj na rangiranje u rezultatima pretrage. Implementacija gzip kompresije je relativno jednostavna i donosi brojne prednosti za web sajtove svih veličina.

Evo primera .htaccess koda kojim omogućavate gzip kompresiju:

<IfModule mod_deflate.c>
	# Omogućavanje Gzip kompresije na podržanim MIME tipovima
	AddOutputFilterByType DEFLATE text/plain
	AddOutputFilterByType DEFLATE text/html
	AddOutputFilterByType DEFLATE text/xml
	AddOutputFilterByType DEFLATE text/css
	AddOutputFilterByType DEFLATE application/xml
	AddOutputFilterByType DEFLATE application/xhtml+xml
	AddOutputFilterByType DEFLATE application/rss+xml
	AddOutputFilterByType DEFLATE application/javascript
	AddOutputFilterByType DEFLATE application/x-javascript
	AddOutputFilterByType DEFLATE application/json
    
	# Ne kompresovati sledeće tipove fajlova
	SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip
    
	# Zahtevi za stare browsere
	<IfModule mod_setenvif.c>
    	BrowserMatch ^Mozilla/4 gzip-only-text/html
    	BrowserMatch ^Mozilla/4\.0[678] no-gzip
    	BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
	</IfModule>
    
	# Dodatne konfiguracije
	DeflateCompressionLevel 6
	DeflateMemLevel 8
	DeflateWindowSize 15
</IfModule>

Ovaj kod koristi mod_deflate da bi se omogućila Gzip kompresija na podržanim MIME tipovima, kao što su HTML, CSS, JavaScript, XML, JSON itd. Takođe, neki tipovi fajlova kao što su GIF, JPEG i PNG su isključeni iz kompresije kako bi se sačuvao njihov kvalitet.

Nakon primene ovih izmena, web server će kompresovati odgovore koristeći Gzip pre nego što ih pošalje browseru, poboljšavajući na taj način brzinu i performanse vašeg web sajta.

Omogućavanje keširanja resursa

Omogućavanje keširanja resursa je važna tehnika koja poboljšava performanse web sajta tako što omogućava browserima da privremeno skladište određene resurse (kao što su slike, stilovi ili skripte) na lokalnom računaru. To omogućava da se ti resursi ne moraju ponovno preuzimati svaki put kada posetilac ponovo poseti određeni web sajt.

Evo primera koda za omogućavanje keširanja resursa:

# Omogućavanje keširanja resursa
<IfModule mod_expires.c>
	ExpiresActive On
	ExpiresDefault "access plus 1 month"
	ExpiresByType text/html "access plus 1 month"
	ExpiresByType text/css "access plus 1 year"
	ExpiresByType application/javascript "access plus 1 year"
	ExpiresByType image/jpeg "access plus 1 year"
	ExpiresByType image/png "access plus 1 year"
	ExpiresByType image/gif "access plus 1 year"
</IfModule>

Ovaj kod koristi modul mod_expires da bi se omogućilo keširanje resursa na strani browsera. ExpiresActive On uključuje mod_expires, dok ExpiresDefault postavlja keširanje na podrazumevani vremenski period (u ovom slučaju, 1 mesec).

Zatim, koristite ExpiresByType da biste postavili specifične vremenske periode za različite tipove resursa. U primeru iznad, slike u formatima JPEG, PNG i GIF keširaju se na 1 godinu, dok se CSS i JavaScript fajlovi keširaju na 1 mesec.

Kada se ove direktive primene, browser će keširati resurse u skladu sa postavljenim vremenskim periodima. To znači da će browser koristiti lokalno keširane verzije resursa sve dok ne istekne vreme keširanja. To smanjuje broj zahteva ka serveru i ubrzava učitavanje web stranica kod sledećih poseta.

Omogućavanje ETag keširanja

Omogućavanje ETag keširanja je još jedna tehnika koja se koristi za poboljšanje keširanja resursa i performansi web sajta. ETag je oznaka koja se generiše za određeni resurs na serveru i koristi se da bi se proverilo da li je resurs promenjen od poslednjeg puta kada je keširan. To omogućava browserima da izvrše uslovno preuzimanje resursa samo ako je resurs ažuriran na serveru.

Evo kako to možete uraditi:

# Omogućavanje ETag keširanja
<IfModule mod_headers.c>
	FileETag MTime Size
</IfModule>

Kada se ovaj kod primeni, server će generisati ETag oznaku za svaki resurs i slati je browseru u odgovoru na zahtev. Browser će zatim koristiti tu ETag oznaku pri sledećem zahtevu za isti resurs. Ako ETag oznaka na browseru odgovara ETag oznaci na serveru, server će poslati odgovor s kodom 304 Not Modified, što znači da se resurs nije promenio i da browser može da koristi lokalno keširanu kopiju.

Ovim se smanjuje promet između servera i browsera jer se samo ažurirani resursi prenose, a ostali se uzimaju iz lokalnog keša browsera.

Onemogućavanje pristupa određenim botovima

Onemogućavanje pristupa određenim botovima, crawlerima ili search engine-ima može biti korisno iz različitih razloga. Neke od uobičajenih situacija u kojima se to radi su:

Zaštita privatnih ili osetljivih podataka: Ako imate određeni deo web sajta koji sadrži privatne ili osetljive podatke, možda želite da onemogućite pristup određenim botovima ili search engine-ima kako biste zaštitili svoje podatke.

Upravljanje opterećenjem servera: Ako primetite da određeni botovi ili pretraživači prekomerno opterećuju vaš web server, možete ih isključiti kako biste smanjili opterećenje i poboljšali performanse servera.

Sprečavanje skeniranja i zloupotrebe: Određeni botovi mogu skenirati vaš web sajt radi otkrivanja ranjivosti ili zloupotrebe. Onemogućavanje pristupa tim botovima može pomoći u smanjenju rizika od takvih napada.

Da biste onemogućili pristup određenim botovima, možete koristiti robots.txt fajl ili .htaccess fajl, s tim da .htaccess fajl omogućava naprednije upravljanje pristupom i kontrolom botova.

Na primer, u .htaccess fajlu možete dodati sledeći kod da biste onemogućili pristup određenom botu:

# Onemogućavanje pristupa određenim botovima
SetEnvIfNoCase User-Agent "^Naziv bota1" bad_bot
SetEnvIfNoCase User-Agent "^Naziv bota2" bad_bot
Order Allow,Deny
Allow from all
Deny from env=bad_bot

# Omogućavanje pristupa svim botovima
SetEnvIfNoCase User-Agent "^Naziv bota1" good_bot
SetEnvIfNoCase User-Agent "^Naziv bota2" good_bot
Order Allow,Deny
Allow from env=good_bot

U ovom primeru koristimo SetEnvIfNoCase direktivu da bismo identifikovali botove na osnovu njihovog User-Agent header-a. "Naziv bota1" i "Naziv bota2" treba zameniti sa stvarnim imenima botova koje želite da omogućite ili onemogućite.

Prva sekcija onemogućava pristup određenim botovima. Oni će biti identifikovani prema njihovim User-Agent vrednostima, a zatim će im se zabraniti pristup sajtu.

Druga sekcija omogućava pristup svim botovima čija se imena podudaraju sa definisanim vrednostima User-Agent-a.

Redosled direktiva "Order Allow,Deny" određuje redosled primene pravila. U ovom primeru, prvo se primenjuje Allow pravilo koje dozvoljava pristup svima, a zatim se primenjuje Deny pravilo koje zabranjuje pristup botovima identifikovanim u prethodnom koraku.

Važno je napomenuti da User-Agent vrednost može biti promenjena od strane botova, tako da ova metoda može biti efikasna samo protiv manje sofisticiranih botova. Napredniji botovi mogu sakriti ili promeniti svoj User-Agent, pa je preporučljivo koristiti dodatne metode za zaštitu od zlonamernih botova, kao što su CAPTCHA ili sistem za detekciju zlonamernog ponašanja.

Zaključak

Kao što ste videli, .htaccess fajl je moćan alat za konfiguraciju web servera. Kroz ovaj fajl možete primenjivati napredne kontrole pristupa i postavljati različite pravila za poboljšanje bezbednosti i funkcionalnosti vašeg web sajta. U ovom tekstu smo razmotrili nekoliko primera praktične primene .htaccess fajla.

Pravilna upotreba .htaccess fajla može omogućiti redirekciju URL-ova, zaštititi određene foldere lozinkom, sprečiti pristup određenim IP adresama ili blokirati određene vrste zahteva. Takođe, možete koristiti .htaccess fajl za postavljanje bezbednosnih header-a, omogućavanje gzip kompresije, keširanja resursa i ETag keširanja. Dodatno, .htaccess fajl pruža mogućnost manipulacije sa HTTP header-ima.

Napominjemo da prilikom konfigurisanja .htaccess fajla treba biti oprezan, jer loše postavljene ili nepotpune direktive mogu izazvati probleme na web serveru ili uticati na funkcionalnost sajta.

Nenad Mihajlović


Ostavite odgovor