Ú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]
Líbí se vám tato stránka?