Údržba webu
8. dubna 2012
Pokud provádíme na webu úpravu, nebo nahráváme jeho novou verzi, bývá
vhodné celý web na nezbytně nutnou dobu odstavit z provozu. Na serveru
Apache k tomu můžeme použít .htaccess
a
mod_rewrite
.
Kód umístíme na začátek souboru
.htaccess
. Nejprve si mod_rewrite
aktivujeme.
RewriteEngine On
Nyní přidáme pravidlo „každý požadavek ukonči s kódem 503“. Kód 503 Service Unavailable oznamuje klientovi, že náš server je dočasně nedostupný. Je vhodné tento kód odesílat – klientem totiž nemusí být jenom člověk (resp. jeho prohlížeč), ale také např. indexovací boti vyhledávačů (GoogleBot, SeznamBot, …) a my jednoduše nechceme, aby nám vyhledávač zaindexoval nějakou chybovou stránku o nedostupnosti našeho serveru.
RewriteEngine On
RewriteRule .* - [R=503,L]
Můžeme
si také vytvořit vlastní chybovou stránku, která informuje uživatele, že
na našem serveru probíhá údržba. Vytvoříme si tedy soubor
.maintenance.php
a umístíme ho do rootu našeho webu. Obsah
souboru nechám na vás. Já si tam umístím následující obsah:
<h1>Probíhá údržba</h1>
<p>Na serveru v tuto chvíli probíhá údržba.</p>
Aby
server v případě chyby použil náš soubor .maintenance.php
,
použijeme direktivu ErrorDocument
:
ErrorDocument 503 /.maintenance.php
RewriteEngine On
RewriteRule .* - [R=503,L]
A ještě vytvoříme pro náš soubor vyjímku z RewriteRule:
ErrorDocument 503 /.maintenance.php
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/\.maintenance\.php$
RewriteRule .* - [R=503,L]
Zadaná
podmínka je nutná, protože když server přijme náš požadavek a my ho
zlikvidujeme pomocí přepisu na .maintenance.php
, server vytvoří
„vnitřní požadavek“ směrovaný na soubor .maintenance.php
a
pravidla v .htaccess
se zpracovávají znovu. Zacyklení, ke
kterému by došlo, tedy zabráníme pomocí uvedené podmínky
RewriteCond.
Obdobnou vyjímku bychom mohli vytvořit i pro statické soubory – obrázky, styly, textové soubory, JavaScript, Flash atd.
ErrorDocument 503 /.maintenance.php
RewriteEngine On
RewriteCond %{REQUEST_URI} !(\.(css|gif|ico|jpg|js|png|swf|txt)|^/\.maintenance\.php)$
RewriteRule .* - [R=503,L]
Taky
si můžeme vytvořit vyjímku pro naší IP adresu – tím si povolíme
přístup k webové aplikaci, všichni ostatní budou mít ale smůlu a
zobrazí se jim soubor .maintenance.php
.
ErrorDocument 503 /.maintenance.php
RewriteEngine On
# misto 111.111.111.111 uveďte svoji IP adresu
RewriteCond %{REMOTE_ADDR} !^111\.111\.111\.111$
RewriteCond %{REQUEST_URI} !(\.(css|gif|ico|jpg|js|png|swf|txt)|^/\.maintenance\.php)$
RewriteRule .* - [R=503,L]
Na
závěr si uvedeme takový celkový přehled (pro použití určitého řádku
odstraňte znak #
ze začátku řádku):
# nastavime chybovy soubor
ErrorDocument 503 /.maintenance.php
# aktivujeme mod_rewrite
RewriteEngine On
## vyjimka pro IP adresu
#RewriteCond %{REMOTE_ADDR} !^MY\.IP\.ADD\.RESS$
## vyjimka pro staticke soubory - obrazky, textove soubory, JavaScript,...
#RewriteCond %{REQUEST_URI} !\.(css|gif|ico|jpg|js|png|swf|txt)$
## vyjimka pro soubor /.maintenance.php
#RewriteCond %{REQUEST_URI} !^/\.maintenance\.php$
## vyjimka pro staticke soubory a soubor /.maintenance.php
#RewriteCond %{REQUEST_URI} !(\.(css|gif|ico|jpg|js|png|swf|txt)|^/\.maintenance\.php)$
# vse presmerujeme nikam s kodem 503 -> presmerujeme na nastaveny ErrorDocument
RewriteRule .* - [R=503,L]