Jak na statické stránky

Pachollini, 4. prosince 2004, 14:21

Nedávno jsem se dostal při tvorbě webu do situace, která je pro mne poněkud netypická: potřeboval jsem udělat web, který bude statický. Hlavním důvodem byla cena hostingu – pokud člověk požaduje skriptování, navíc se slušnou podporou pro práci s XML a XSLT, zaplatí obvykle násobek toho, co stojí hosting bez skriptování. A pro jednoduchou prezentaci statické stránky stačí, takže nač platit stovky korun ročně navíc.

Začal jsem tedy zkoumat, jak to provést, aby se takové stránky dobře tvořily a udržovaly, tedy abych mohl měnit společné části na jednom místě, aby se mi menu, mapa stránek a další navigační prvky generovaly automaticky atd. První možností, o které jsem přemýšlel, byl textový preprocesor PPWizard, na který jsem četl spoustu chvály a o kterém navíc Jan Bien napsal seriál na Intervalu.cz. Použití PPWizardu by pro mne však mělo několik zásadních nevýhod. První z nich je, že bych ho musel instalovat, a učit se ho používat, což by určitě zabralo spoustu času. Druhou nevýhodou je, že spoustu věcí, které při tvorbě webu používám, mám už vyřešených v PHP a při použití PPWizardu bych je musel řešit znovu, případně hledat, zda je už někdo vyřešil. Jsem zvyklý používat objekty, pracovat s XML a XSLT, využívat obrovské množství funkcí, které jsou v PHP k dispozici a tohle všechno by mi určitě dříve či později chybělo. A navíc, pokud budu mít stránky v PHP, případný přechod ze statických stránek na dynamické bude velmi snadný. Moje volba je tedy celkem jasná (což nevypovídá ani tak o kvalitách PPWizardu, jako spíš o mně).

Dobrá tedy, pro tvorbu stránek použiji PHP, ale jak to udělat, abych měl na výstupu statické stránky? Mohl bych napsat v PHP systém, který vygeneruje statické soubory webových stránek. Anebo bych mohl takový systém najít, stáhnout a použít. Obé ovšem obnáší relativně dost práce a případný přechod na dynamické generování stránek by znamenal další spousty úprav. Ideální by bylo řešení, které by u mne v počítači generovalo stránky dynamicky se vším všudy (tj. běželo by jako normální webový server) ale tak, aby se daly snadno přehrát na server jako statická prezentace. To znamená mít jednak vhodnou strukturu URL a jednak nějaký nástroj, který umožní dostatečně pružně vytvořit lokální kopii serveru. Protože používám server Apache, dá se k prvnímu použít mod_rewrite a na lokální kopie webových serverů je tu skvělý HTTrack. Co dál?

Postup

První krok: nastavení systému

Předpokladem je nainstalovaný webový server Apache s podporou PHP. Na něm je třeba kvůli elegantní práci s odkazy zprovoznit podporu virtuálních serverů a mod_rewrite a přidat virtuální server s chystanou webovou prezentací, nazvěme ji originálně třeba „l-firma“. Na Windows s Apache 1.3.x toho lze docílit nějak takto:

  1. Do konfiguračního souboru Apache httpd.conf přidáme následující kód:
    NameVirtualHost 127.0.0.1
    <VirtualHost 127.0.0.1>
        ServerName l-firma
        DocumentRoot e:/www/firma.cz
        Options All MultiViews
    </VirtualHost>
    Tím řekneme Apachi, že kořenový adresář virtuálního serveru l-firma je v adresáři e:/www/firma.cz.
  2. Když už jsme u konfigarace Apache, zapneme podporu mod_rewrite a možnost konfigurace pomocí souboru .htacces:
    LoadModule rewrite_module modules/mod_rewrite.so
    AddModule mod_rewrite.c
    AccessFileName .htaccess
    <Directory />
        AllowOverride All
    </Directory>
    Nastavení <Directory> už v souboru httpd.conf bude, takže je třeba ho změnit, eventuálně přidat nastavení jen pro příslušný adresář našeho nového webu:
    <Directory "e:/www/firma.cz">
        AllowOverride All
    </Directory>
  3. Ještě je třeba říci Windows, že požadvky na server „l-firma“ mají směřovat na Apache, který běží na našem počítači. K tomu je třeba (ve Windows XP) přidat do souboru c:\windows\system32\drivers\etc\hosts následující řádek:
    127.0.0.1 l-firma
    Nyní by po restartu Apache mělo vše fungovat tak, že po zadání adresy http://l-firma/pokus.html do browseru vrátí server soubor e:\www\firma.cz\pokus.html. Pokud to nefunguje, asi je někde chyba. V takovém případě mne prosím nekamenujte, nejsem expert na konfiguraci čehokoliv a pokud přijdete na to, kde je v návodu chyba, budu vděčný.
  4. Do adresáře e:\www\firma.cz\ umístíme soubor s názvem .htacces a následujícím obsahem:
    RewriteEngine on
    RewriteCond %{REQUEST_URI} ^.*/$
    RewriteRule ^(.*)/$ /index.php?path=$1 [L]
    Tento soubor pravidel způsobí, že pokud si vyžádáme např. adresu http://l-firma/produkty/plysovi-medvedi/, pošle nám server místo toho výsledek skriptu http://l-firma/index.php?path=produkty/plysovi-medvedi. Jinými slovy, všechny požadavky, které budou končit lomítkem, tedy budou vypadat jako „výpis adresáře“, se zpracují skriptem index.php.

Druhý krok: tvorba „motoru“ stránek

Nyní je na řadě tvorba samotného webu. Vytvoříme mechanismus, kterým ve skriptu index.php zpracujeme požadavek na danou stránku, s využitím všech možností PHP, které mohou obnášet generování navigace z XML, vkládání opakujících se prvků stránky z externích souborů, natahování obsahu z databáze etc. – fantasii se meze nekladou. Důležité je, aby všechny stránky, které se na webu nacházejí, měly „statickou“ adresu, v našem případě tedy končily lomítkem. Je samozřejmě možné použít i koncovku .html, ale mně osobně připadá „adresářový“ způsob nejpraktičtější, protože umožňuje v budoucnu snadno rozšiřovat web do hloubky a přitom se nezmění adresa současných stránek.

Třetí krok: vytvoření statické kopie webu

Když je web hotový a vše funguje, jak má, můžeme přistoupit k poslednímu kroku: vytvoření statické kopie webu. Postup je úplně stejný, jako kdybychom chtěli stáhnout stránky z internetu: tedy spustíme (Win)HTTrack, vytvoříme nový projekt a jako URL zadáme http://l-firma/. V nastavení stahování v záložce „Experts Only“ nastavíme políčko „Rewrite links: internal / external“ na hodnotu „Original URL / Original URL“. Tím způsobíme, že HTTrack nebude přepisovat adresy odkazů, tedy nepřepíše nám <a href="/produkty/"> na <a href="/produkty/index.html">. Poté už jenom stáhneme web někam na disk (uloží se pěkně v adresářové struktuře) a nahrajeme jej na náš levný hosting.

Výhody a nevýhody

Uvedený postup má mnoho výhod. Umožňuje použít všechny funkce PHP, eventuálně databázi, vygenerované stránky mají URL zcela nezávislá na použité platformě a navíc logicky strukturovaná, přechod na dynamické generování je velmi snadný: stačí nahrát hotové skripty na server a nastavit mod_rewite a uživatel na první pohled nic nepozná. Na druhou stranu jsem narazil i na pár drobných nevýhod. Největší z nich je, že pokud se ve webu objeví nějaký chybný odkaz, je velmi obtížné ho objevit a navíc se mi párkrát stalo, že se HTTrack dostal do (skoro) nekonečné smyčky. Rovněž není nijak ošetřena aktualizace stránek na serveru, takže nezbývá než pokaždé nahrát na server všechny html soubory nebo se spolehnout na synchronizační funkce některého FTP klienta.

Asi není třeba dodávat, že použití stejného systému (tedy hlavně mod_rewrite pro vytvoření struktury webu) si své výhody zachovává i u webů generovaných dynamicky.

Co vy na to?

zobrazit všechny komentáře

Aktuální Seky

.