Občas se může stát, že hosting dočasně odstaví databázi. Třeba kvůli přetížení. WordPress se pak v některých případech může zachovat dost nešťastně: místo normální chybové stránky začne návštěvníkům ukazovat instalační obrazovku přes wp-admin/install.php.
Tohle na produkčním webu opravdu nechcete. Přes pár lety k tomu vznikl Co byste po instalaci WordPressu měli smazat či změnit? install.php – pozor ať nedopadnete špatně, ale řešení to nebylo až takové, jak by bylo potřeba. Takže je tu novější.
Řešení má dvě části.
1. Vytvořte vlastní stránku pro výpadek databáze
Do složky:
/wp-content/
vložte soubor:
db-error.php
Například s tímto obsahem:
<?php
http_response_code(503);
header('Content-Type: text/html; charset=utf-8');
header('Retry-After: 900');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');
header('X-Robots-Tag: noindex, nofollow');
?>
<!doctype html>
<html lang="cs"
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Web je dočasně nedostupný</title>
<style>
body {
margin: 0;
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background: #f5f7fb;
color: #111827;
}
.wrap {
max-width: 760px;
margin: 12vh auto;
padding: 32px;
background: #fff;
border-radius: 16px;
box-shadow: 0 10px 30px rgba(0,0,0,.08);
}
h1 {
margin-top: 0;
font-size: 28px;
line-height: 1.25;
}
p {
font-size: 17px;
line-height: 1.6;
}
.small {
color: #6b7280;
font-size: 14px;
}
</style>
</head>
<body>
<main class="wrap">
<h1>Web je dočasně nedostupný</h1>
<p>Něco se na serveru dočasně pokazilo. Zkuste stránku za pár minut obnovit.</p>
<p class="small">HTTP 503 – dočasný výpadek služby.</p>
</main>
</body>
</html>
WordPress tento soubor použije ve chvíli, kdy se nedokáže připojit k databázi.
Důležité je hlavně tohle:
http_response_code(503);
Tím říkáte prohlížečům, robotům i případné cache, že jde o dočasný výpadek služby, ne o běžnou stránku.
2. Zablokujte instalační obrazovky ve .htaccess
Do .htaccess přidejte vlastní pravidla nad blok WordPressu. Nikdy je nedávejte mezi:
# BEGIN WordPress
# END WordPress
Tenhle blok si WordPress může přepisovat sám.
Nad něj dejte například:
# VLASTNI OCHRANY PRODUKCNIHO WEBU
<IfModule mod_rewrite.c>
RewriteEngine On
# Nikdy nezobrazovat instalacni obrazovku WordPressu na produkci
RewriteRule ^wp-admin/install\.php$ – [R=503,L]
# Nikdy nezobrazovat konfiguracni instalacni obrazovku
RewriteRule ^wp-admin/setup-config\.php$ – [F,L]
</IfModule>
# Pro 503 pouzijeme stejnou stranku jako pro DB error
ErrorDocument 503 /wp-content/db-error.php
Tím zajistíte, že:
/wp-admin/install.php
vrátí stav 503 a zobrazí vaši výpadkovou stránku.
a
/wp-admin/setup-config.php
bude zakázané.
Jak to otestovat?
Zkuste v prohlížeči otevřít:
https://vas-web.cz/wp-admin/install.php
Neměla by se zobrazit instalační obrazovka WordPressu, ale vaše výpadková stránka.
Ještě lépe to ověříte přes terminál:
curl -I https://vas-web.cz/wp-admin/install.php
curl -I https://vas-web.cz/wp-admin/setup-config.php
Správný výsledek je zhruba:
/wp-admin/install.php 503
/wp-admin/setup-config.php 403
Pokud používáte Cloudflare, je zároveň vhodné ověřit, že se tyto odpovědi nekešují. U podobných adres chcete vidět spíš DYNAMIC, ne HIT.
Shrnutí
Na produkčním WordPressu se instalační obrazovka nemá nikdy veřejně zobrazovat. Pokud hosting na chvíli odstaví databázi, návštěvník má vidět normální výpadkovou stránku, ne install.php.
Minimum, které stojí za to udělat:
/wp-content/db-error.php
a v .htaccess zablokovat:
/wp-admin/install.php
/wp-admin/setup-config.php
Je to jednoduchá pojistka, která může při výpadku databáze ušetřit dost nepříjemností.
PS: Text výše je kompletní souhrn od ChatGPT se kterou jsem to intenzivně řešil, tohle nemá smysl psát ručně a já si sem velmi často schovávám řešení i pro sebe 🙂 A ilustrační obrázek je taky nový pokus od AI. S Codexem dávám dohraomdy „mj desk“, pomůcku co z promptů dělá ilustrace k článkům v konkrétních stylech. Ale je to docela boj a tady, u 365tipů, to bude složitější. Ale ladit to budu jen postupně, nemám tolik časi ani „času“ v Midrjourney abych tomu věnoval pár hodin a desítky pokusů
