Redirekcija sa .htaccess

Po završetku redizajna sajta, i kompletnom prelasku sa statičkih .html na dinamičke .php stanice, pogledao sam log sajta, da bih se uverio da je sve na svom mestu (ako ste i vi kod Verata, to je /log/ime-domena-err datoteka).

Užasnuo sam se gomilom grešaka 🙁 prvenstveno HTTP/404 Page not found. Normalno, više od polovine pogodaka na moj sajt dolazi sa raznih pretraživača, a oni ne osvežavaju sadržaj keša preterano često – Google ima keširan sajt od pre mesec dana. Ok, trebalo je rešiti pitanje šta sa starim adresama, koje su se negde zadržale (a u svetlu inicijative “no broken links”).

Jedna od opcija je kreiranje svih strana koje su i ranije postojale, sa kodom za redirekciju na novu stranu (meta tag) ili linkom koji vodi na novu stranu za slučaj da pregledač ne poštuje meta direktive. No, to je bilo krajnje ružno rešenje; posle malo guglovanja, uz činjenicu da je web server Apache, našao sam idealno rešenje: .htaccess datoteka! (o kojoj ama baš nigde ništa ne piše na Veratovom sajtu).

.htaccess je obična tekstualna datoteka, namenjena kontroli ponašanja web servera na direktorijum nivou; primenjuje se u direktorijumu gde je, kao i u svim poddirektorijumima ispod koji nemaju svoju .htaccess datoteku.

Pomoću ovde datoteke moguće je postavljati prava pristupa, kontrolisati redirekciju kao i koja strana odgovara na HTTP greške. Korišćenje je vrlo jednostavno; otvorite je u tekst editoru i postavite:

redirect 301 /index.html http://www.vesic.org/index.php

redirect definiše tip komande, 301 kod koji će se poslati pregledaču (Moved Permanently, za slučaj da je pretraživač u pitanju, znaće da tražena stranica nije važeća i staviće novu u red za keširanje) kao i ciljni URL na koji treba preusmeriti pregledač. Ovo je client-side redirekcija; ako želite da radite server-side redirekciju (brže, ali nema informacije za korisnika da je do promene došlo) koristite Rewrite direktive (rewriteEngine, rewriteCond, rewriteRule).

Kada već menjamo fajl, nije loše dodati i ovo:

ErrorDocument 404 /404.php

Ovako sve HTTP 404 greške preusmeravamo na našu stranu, i time izbegavamo standardnu stranu od provajdera. Za više detalja o .htaccess datoteci, molim pogledajte ovde.

WordPress i lokalizacija

Kada sam odlučio da krenem sa blogom, ispitao sam 4 rešenja za Linux/Apache/Php.

WordPress je bez daljnjeg daleko ispred tih rešenja: izuzetno laka konfiguracija, udoban i efikasan interfejs i minimalni zahtevi:

  • PHP version 4.1 ili noviji (PHP 5 se još ne preporučuje)
  • MySQL version 3.23.23 ili noviji

Ono što je bitno, WP podržava i lokalizaciju; recimo, izmenom fajla wp-includes/locale.php možete podesiti nazive meseci i dana u nedelji. No, šta da radimo sa Četvrtkom 🙂 (jedini pomenuti ima naša slova u nazivu)?

Akcija zavisi od vaše oduke: koji kodni raspored želite na stranicama? Kod nas su uobičajeni osmobitni standardi Windows 1250 (ne preporučujem, iako je lakše pripremati stranice u ovom rasporedu na Windows platformi) i ISO 8859-2 (daleko bolji izbor).

No, više nema razloga da ne koristite neki potpuniji standard, koji vam neće vezivati ruke, ni vama ni vašim posetiocima koji ostave eventualni komentar 🙂 – Unicode.

Unicode definiše tačan raspored karaktera, ali ne i njihovu prezentaciju (zapis) u odgovarajućem mediju. Za to su i dalje odgovorne kodne strane; za Unicode, prirodan izbor je UTF8, Unicode Transformation Format-8, način da Unicode karaktere predstavimo preko 8 bita (ako vas ovo zanima detaljnije, predlažem odličan članak Marka Dejvisa)

Ok, odlučili ste se za UTF8. Potrebne su dve stvari:

1. da pregledaču (browseru) posetioca vašeg sajta "kažete" da je strana zapisana u UTF8 kodnoj strani:

U okviru <head> … </head> sekcije strane, dodajte ovaj meta tag:

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

2. da sadržaj na strani zaista i bude zapisan u UTF8 formatu

Stavka dva zna da bude problem; prvo, "prava" UTF8 datoteka ima na početku tri bajta ili UTF8 signature (xEF xBB xBF) koje znaju da zbune neke tekst editore. Drugo, ako je to datoteka izvornog koda (.php / .asp strana), server može da pravi problema oko tako zapisane strane.

Da se vratimo na primer kojim smo počeli: locale.php; tu je četvrtak zapisan kao:

$weekday[4] = __(‘Četvrtak’);

No, kako zapisati Č? Tip fajla ne može da bude UTF8 jer se php uguši sa ovakvim fajlom a ni jedna od osmobitnih kodnih strana ne vrši posao. Srećom, neko je i na to mislio 🙂 Iskoristio sam HTML kodiranje (&#) bilo kog karaktera; tako gornji red postaje:

$weekday[4] = __(‘&#268;etvrtak’);

zapisan na stari način (osmobitni karakteri) a prikazan kako treba (pogledajte kalendar desno). Prihvatam da ovakav način zapisa izgleda rogobatno, ali rešava mnogo više problema no što ih uvodi.

Zaključak: ako radite u datotekama izvornog koda, koristite gornji način; ako direktno editujete neku statičku HTML stranicu, koristite editor koji to podržava, kao što je recimo Scite. Evo tabele najinteresantnijih karaktera za naše podneblje:

&#262;  Ć   &#263;  ć   &#268;  Č   &#269;  č
&#272;  Đ   &#273;  đ   &#352;  Š   &#353;  š
&#381;  Ž   &#382;  ž   &#128;  €   &#174;  ®

a kompletnija tabela je ovde: http://www.tony-franks.co.uk/UTF-8.htm

CSS, PHP, Smarty na delu

Jako dugo vremena sam zapostavljao Vesic.org i po pitanju sadržaja a i po pitanju samog html koda koji je prikazivao sajt.

Igrom slučaja (čitaj: razboleo se na odmoru ;)) dobio sam malo vremena koje sam posvetio kompletnoj obnovi sajta; uz Aleckovu pomoć, kompletan HTML kod je prepisan po CSS2 standardima što je sledeći korak daleko olakšalo: upotreba šema (templates).

Ono što je za svaki sajt karakteristično je da sve strane slede neki definisani dizajn, i da se samo radni (obično središnji deo) deo menja u zavisnosti šta je potrebno na toj strani prikazati. Ostatak strane je identičan, do nivoa referenci na ostale objekte (skriptove, css datoteke, slike) koje se menjaju u zavisnosti od “dubine” na kojoj se dotična strana nalazi u strukturi sajta.

Za održavanje tog zajedničkog dela postoje ručni 😉 metod, i metod šema – uz pomoć nekog programa obeležite zajedničke delove strane, markirate ih, a taj program se brine o tome da se pri promeni zajedničkog dela to propagira kroz sve stranice koje koriste tu šemu. U početku, taj posao je obavljao jako dobro Dreamveawer, izuzetno dobar, zahtevan i skup program.

No, kako sam ja programer i daleko lakše koristitim čist tekst editor, a moj provajder Verat u okviru web paketa besplatno omogućava Php i MySQL, ideja se sama nametnula – probati nešto novo. Na savet kolege Marjana, pogledao sam Smarty, odličnu php biblioteku šema: stabilna, dobro urađena i laka za korišćenje. Malo programiranja, malo premeštanja stranica po sajtu, izdvajanja zajedničkih delova (navigacije) za grupe stranica i sada je održavanje sajta milina; dve šeme, header.tpl i footer.tpl i set stranica koje izgledaju otprilike ovako:

< ?php
$selectedLink = 1;
$selectedSubNavLink = 0;
include 'subnav.php';
?>

i to je sve 🙂 subnav.php čuva navigaciju za taj direktorijum a sam sadržaj stranice (centralni deo) je u posebnim datotekama, koje su oslobođenje bilo kakve navigacije i formatiranja (tnx to CSS2 i Aleck :)).

Rezultat je pred vama: mnogo brži sajt (Smarty podržava keširanje jednom izvršene strane), i daleko lakše održavanje sajta (što znači više vremena za kvalitetan sadržaj).