Jak na statické stránky
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:
- 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ářie:/www/firma.cz
. - 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 souboruhttpd.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>
- 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 soubore:\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ý. - 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í skriptemindex.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?
- [1] šikovné, Jan Bien, 4. prosince 2004, 15:01
- [2] , Petr, 4. prosince 2004, 15:09
- [3] Změny na výstupu, Pachollini, 4. prosince 2004, 16:16
- [4] Poslední HTTrack, Brbla, 4. prosince 2004, 17:00
- [5] míra dynamičnosti, cita, 29. prosince 2004, 23:32
- [6] Díííík, BoneFlute, 14. srpna 2005, 18:46
- [7] , Jan Rozehnal, 2. prosince 2005, 00:03
- [8] wget, Petr Kletečka, 12. dubna 2006, 07:29
- [9] Statický web na CD, los_adios, 12. května 2006, 18:11
- [10] Re: Statický web na CD, Pachollini, 12. května 2006, 18:13
- [11] ad BoneFlute, - anonym - , 1. listopadu 2006, 06:42
- [12] Tento 3 roky starý článek je stále aktuální, Jakub Hejda, 27. prosince 2007, 09:43
Aktuální Seky
- Truhlářství Švagr – kvalitní dřevěná okna a dveře – Hledáte-li kvalitní dřevěná eurookna nebo vchodové či interiérové dveře, Truhlářství Švagr je správnou volbou.