.htaccess fajl – nevidljivi čarobnjak
.htaccess (hypertext access) fajl se najčešće nalazi u koren direktorijumu sajta. Tačka na početku naziva fajla označava da je fajl sakriven (u Linux-u na kome je postavljena većina servera). Za rad sa njim ga prvo moramo učiniti vidljivim.
.htaccess fajl je konfiguracioni. Specifičan je za direktorijum za Apache veb server. Podešavanja u .htaccess se primenjuju na direktorijum u kome je .htaccess, ali i na sve njegove poddirektorijume. Ta podešavanja odmah stupaju na snagu, što znači da nije potrebno ponovo pokretanje servera.
.htaccess fajl – čemu služi?
Svaki red ovog fajla je direktiva upućena serveru. Najčešće se te direktive odnose na uklanjanje sumnjivih IP adresa i određenih ekstenzija iz URL-ova (na primer html ili php). Često se ovaj fajl koristi kada želimo da korisnika uputimo na www ili non-www verziju sajta. Koristi se za ponovno pisanje i preusmeravanje URL adresa, za vođenje dokumenata o greškama i zaštitu pristupa određenim datotekama ili čitavim direktorijumima.
301 trajna redirekcija na novi sajt
Kada želimo da čitav sajt prebacimo na novi domen moramo na starom domenu uraditi 301 redirekciju. Svi korisnici koji dođu na stari domen, automatski će biti preusmereni na novi. To se postiže unosom sledećih linija u .htaccess fajl:
RewriteEngine On
RewriteRule (.*) http:// www.novi-domain.com /$1 [R=301, L]
Ako smo uneli RewriteEngine On, ne moramo ga ponovo unositi, već naredne linije koda samo nastavljamo ispod.
.htaccess fajl postavljamo u root direktorijum, zajedno sa index fajlom.
301 trajna redirekcija usled premeštanja ili preimenovanja strane
Ako smo neku stranu premestili ili joj promenili naziv, da bi posetioci došli na novi stranu, možemo ih preusmeriti na sledeći način:
Redirect 301 / stara-stranica.html http://domen.com/nova-stranica.html
301 trajna redirekcija usled premeštanja ili preimenovanja strane
Server automatski prikazuje 404 stranicu ukoliko korisnik ne može da joj pristupi. Možemo napraviti svoju prilagođenu 4040 stranicu:
ErrorDocument 404 /greska-stranica.html
Preusmeravanje svih posetilaca na neku stranicu
Ako radimo neke veće izmene na sajtu ili iz bilo kojih drugih razloga, možemo privremeno sve posetioce preusmeriti na željenu stranu:
Order deny, allow
Deny from all
Allow from 123.123.123.123.
ErrorDocument 403 /zeljena-stranica.html
<Files zeljena-stranica.html>
Allow from all
<Files>
Redirekcija na sajt sa i bez www
Da bismo sprečili dupliranje rezultata i sve probleme koji uz to idu, moramo se odlučiti da li ćemo koristiti www ili non-www verziju sajta. U slučaju da izaberemo sa www, moramo izvršiti redirekciju sa non-www verzije i obrnuto.
Želimo www:
RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
RewriteRule ^(.*) http:// www.domain.com /$1 [R=301, L]
Ne želimo www:
RewriteCond %{HTTP_HOST} ^www.domain.com$ [NC]
RewriteRule ^(.*) http://domain.com /$1 [R=301, L]
Zabrana pregleda direktorijuma
U slučaju da ne postoji index stranica u direktorijumu, posetioci mogu videte spisak svih njegovih fajlova. Da bi se to zabranilo, ispisujemo sledeće:
Options All – Indexes
Zabrana pristupa .htaccess fajlu
<Files .htaccess>
Order allow, deny
Deny from all
<Files>
Značaj za SEO
Status redirekcije (preusmeravanja) je veoma značajan sa SEO aspekta. Ako prilikom preusmeravanja nije navedena vrsta redirekcije, većina servera preusmeravanje tumači kao privremenu – 302. Ako bi redirekciju trebalo tumačiti kao trajnu, to mora biti izričito navedeno jer preusmeravanje 301 prenosi ranking sa izvora sa koga se vrši preusmeravanje na cilj preusmeravanja.
Drugačije se posmatra privremena 302 redirekcija i tom prilikom se rangiranje ne prenosi na ciljanu lokaciju. Prilikom preusmeravanja ili ponovnog pisanja URL-ova, kao i usmeravanja na www. trebalo bi uvek birati 301 preusmeravanje.
Redirekcija na www. verziju ako je URL bez www. je bitna jer željeni canonical URL olakšava Google-u da identifikuje podrazumevanu adresu, pa se izbegava dupliranje sadržaja. U svakom slučaju bitno je da se ne pojave 404 kodovi greške jer Google obično ne indeksira sajtove koji u odgovoru servera prikazuju kod greške 404. Pogrešno rukovanje redirekcijom preko .htaccess fajla može poprilično degradirati sajt. Može se desiti da stranica uopšte ne bude indeksirana ili da joj se u značajnoj meri ranking degradira.
.htaccess i WORDPRESS
.htaccess fajl ima široku upotrebu u WordPress-u. Pored ostalog, stvara SEO friendly URL-ove.
Uloga .htaccess fajla:
Sprečavanje izvršavanja PHP
Na primer, /wp-content/uploads/ česta je meta napada i u njega je ubacuju zlonamerni .php fajlovi. Pošto ovaj direktorijum služi samo za upload-ovanje fajlova i slika, možemo napraviti prazan .htaccess fajl u koji upisujemo dole navedeni kod. Fajl postavimo u dati direktorijum:
<Files *.php>
deny from all
</Files>
Sprečavanje pregleda sadržaja direktorijuma.
Kako bismo to sprečili izlistavanje fajlova u direktorijumu, u .htaccess dodajemo:
Options -Indexes
Spreči pristup određenim fajlovima u /wp-content/ direktorijumu.
U novi .htaccess koji se nalazi u samom folderu postavi se kod kako bi se sprečio pristup sistemskim datotekama. Statičkim fajlovima, slikama, JS I CSS -u nije onemogućen pristup:
Order deny,allow
Deny from all
<Files ~ „.(xml|css|jpe?g|png|gif|js)$“>
Allow from all
</Files>
Spreči neovlašćen pristup .htaccess fajlu.
Ograničava se pristup drugima, ali mi možemo pristupiti preko C panel-a ili FTP-a:
<files ~ „^.*.([Hh][Tt][Aa])“>
order allow,deny
deny from all
satisfy all
</files>
Sprečava neovlašćeni pristup wp-config.php fajlu.
Posebno je značajan je su u njemu najvažniji parametri za pristup.
<files wp-config.php>
order allow,deny
deny from all
</files>
Spreči pristup Admin panelu sa određenih IP-adresa.
U posebni .htaccess fajl u /wp-admin/ se postavi kod kojim se ograničava pristup admin panelu samo sa IP-adresa koje sami odredimo.
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName „WordPress Admin Access Control“
AuthType Basic
<LIMIT GET>
order deny,allow
deny from all
# whitelist Home IP address
allow from xx.xx.xx.xxx
# whitelist Work IP address
allow from xx.xx.xx.xxx
</LIMIT>
Trajna redirekcija za promenjene ili nove URL-ove.
U slučaju promene naziva kategorije, taga i slično uradi se tzv. 301 redirekcija.
Redirect 301 /oldurl/ http://www.example.com/newurl
Redirect 301 /category/television/ http://www.example.com/category/tv/
Zabrana hot-linkovanja slika.
Za sprečavanje krađe slika možemo u kodu izmeniti putanju do slike koju želimo da im se prikaže umesto originalne slike:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+.)?domen.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*.(jpe?g|gif|bmp|png)$khttp://domen.com/images/stolen.jpg
Osiguravanje /wp-includes/.
Korisnici ne pristupaju fajlovima u ovom direktorijumu, već se oni pozivaju iz drugih fajlova. Zbog toga bi bilo dobro onemogućiti spoljni pristup istom:
# Block the include-only files.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ – [F,L]
RewriteRule !^wp-includes/ – [S=3]
RewriteRule ^wp-includes/[^/]+.php$ – [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+.php – [F,L]
RewriteRule ^wp-includes/theme-compat/ – [F,L]
</IfModule>
Za određivanje pretraživaču korisnika koliko dugo da kešira koje fajlove.
Znamo da je keširanje u pretraživaču bitno za brzinu učitavanja sajta.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg „access 1 year“
ExpiresByType image/jpeg „access 1 year“
ExpiresByType image/gif „access 1 year“
ExpiresByType image/png „access 1 year“
ExpiresByType text/css „access 1 month“
ExpiresByType text/html „access 1 month“
ExpiresByType application/pdf „access 1 month“
ExpiresByType text/x-javascript „access 1 month“
ExpiresByType application/x-shockwave-flash „access 1 month“
ExpiresByType image/x-icon „access 1 year“
ExpiresDefault „access 1 month“
</IfModule>