Siirry pääsisältöön

Mukautetut virhesivut

Mukauta virhesivuja palvelemaan paremmin sivuston kävijöitä.

Päivitetty tällä viikolla

Joustava huoltotilasivu

Paras tapa ohjata kaikki liikenne väliaikaisesti yhdelle staattiselle sivulle (esimerkiksi virheilmoituksen tai huoltoviestin näyttämiseksi), on lisäämällä tiedostoon /data/wordpress/nginx/custom.conf seuraavanlainen rivi:

rewrite ^(.*)$ /maintenance.html break;

Uudelleenkirjoituksen kohde voi olla mikä tahansa URL-osoite, ja vierailijoille näytettävä väliaikainen näkymä voi sijaita myös täysin eri palvelimella.

WordPress-ytimen huoltotila moduuli

WordPressin sisäänrakennettuja maintenance.php ja .maintenance -tiedostoja voidaan hyödyntää Seravon ympäristössä kuten missä tahansa muuallakin. Lisätietoja aiheesta WordPressin kehittäjä dokumentaatiossa.

Pelkistetty staattinen huoltotilasivu

Jos index.html -tiedosto sijoitetaan /data/wordress/htdocs/ -kansioon, se ohittaa olemassa olevan index.php -tiedoston, joka normaalisti lataa WordPressin. Staattinen tiedosto toimii aina, vaikka PHP jostain syystä olisi rikki. Staattinen sivu voi olla hyödyllinen esim. DDOS-hyökkäyksen aikana, koska staattista sisältöä voidaan tarjoilla paljon nopeammin kuin PHP:llä luotua sisältöä.

Mukautettu tietokantayhteysvirhesivu

Jos WordPress ei pysty muodostamaan yhteyttä tietokantaan, näytetään PHP-tiedosto /data/wordpress/htdocs/wp-content/db-error.php. Tämä tiedosto voidaan mukauttaa näyttämään mitä tahansa staattista tai dynaamista sisältöä oletuspohjan sijaan.

Mukautetut PHP-fataalivirhe- ja jäsennysvirhesivut

Yleensä useimmat PHP-virheet tulisi käsitellä PHP:llä. WordPress hoitaa tämän melko hyvin, mutta sitä voidaan laajentaa käyttämällä mukautettua sulkemiskäsittelijää (eng. shutdown handler) PHP-fataalivirheiden ja PHP-jäsennysvirheiden (eng. parse error) havaitsemiseksi. Nämä saavat yleensä PHP:n lähettämään HTTP-koodin 500 ja tyhjän sivun. Tyhjä sivu on kävijöille hyödytön, koska selain näyttää joko tyhjää tai yleisen virhesivun riippuen siitä, mikä on sisäänrakennettu selaimeen.

Seuraava koodiesimerkki näyttää, kuinka index.php -tiedostoa voidaan muokata näyttämään mukautettu staattinen 500.html -tiedosto PHP-fataalivirheiden tapahtuessa tyhjän vastauksen sijaan. Tätä voidaan hyödyntää esimerkiksi sivukartan, yhteystietojen, huoltotiedotteen tai muun sopivan sisällön näyttämiseen.

<?php 
/*
* WordPress includes code for most error handling
* apart from parse errors and fatal errors.
* With this function a custom error message will be
* shown when those errors are catched.
*
* Normally PHP would emit HTTP code 500 with no
* payload on fatal errors. This function adds
* a customized payload to inform users about whatever.
*/
function customErrorHandlerAtShutdown() {
$error = error_get_last();
if ( $error ) {
// Error constants listed at
// http://php.net/manual/en/errorfunc.constants.php
switch ( $error['type'] ) {
case E_ERROR: // PHP Fatal error
case E_PARSE: // PHP Parse error
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
include '500.html';
break;
}
}
}
register_shutdown_function('customErrorHandlerAtShutdown');

// WordPress view bootstrapper
define('WP_USE_THEMES', true);
require(dirname( __FILE__ ) . '/wordpress/wp-blog-header.php');

Tämä koodi varmistaa, että virhesivua ei välimuistiteta missään kohtaa HTTP-yhteyttä.

Mukautetut virhesivut nginx:n kautta

Suosittelemme, että virheiden käsittely suoritettaisiin älykkäästi WordPress/PHP-koodissa. Lähtökohtaisesti nginx:n error_page -määrityksiä ei pitäisi olla tarvetta käyttää.

Määritys on kuitenkin mahdollinen, jos halutaan, että nginx tarjoilee virhesivuja PHP:n sijaan. Alla on esimerkki siitä, miltä /data/wordpress/nginx/error-pages.conf -tiedosto voisi sisältää:

fastcgi_intercept_errors on; 
error_page 500 501 502 /wp-content/wp-error.php;
error_page 499 /wp-content/499.html;

Tämä virhesivu on riippumaton WordPress-pinoista ja toimii huolimatta WordPress-koodin PHP-virheistä. Tämä kuitenkin peittää kaikki PHP-virheiden tulosteet, joten se voi joskus häiritä vian selvittämistä. Myös välimuistipinon ylemmät kerrokset voivat poimia virhekoodin ja korvata vastauksen jollain muulla, joka välittää saman virheen.

Vastasiko tämä kysymykseesi?