Siirry pääsisältöön

WordPress-uudelleenohjaukset ja osoiterakenne

Opi toteuttamaan uudelleenohjaukset WordPressissä PHP-koodilla (mu-plugins), hallitsemaan pääverkkotunnusta, testaamaan ohjauksia curl-komennolla ja tarkistamaan WP Rewrite API -säännöt.

WordPress-sivustolla uudelleenohjauksia (redirects ja rewrites) voidaan toteuttaa usealla eri tasolla tarpeen mukaan:

  • Palvelintason ohjaukset (nginx): Nopein tapa yksittäisille sivuohjauksille ja laajoille ohjauslistoille, sillä pyyntö ohjataan eteenpäin ennen PHP:n ja WordPressin käynnistymistä. Katso ohje Voinko lisätä omia asetuksia HTTP-palvelimelle (nginx)?.

  • Lisäosat (esim. Redirection): Helppo hallintapaneelipohjainen ratkaisu sisällöntuottajille. Katso ohje WordPressin uudelleenohjaukset – Redirection-lisäosa.

  • PHP-pohjaiset ohjaukset (mu-plugins): Joustavin tapa silloin, kun uudelleenohjaus vaatii ohjelmallista logiikkaa, ehtoja tai verkkotunnuskohtaista reititystä.

PHP-uudelleenohjaukset (mu-plugins/redirects.php)

Kun haluat toteuttaa ohjelmallisia uudelleenohjauksia ennen teeman tai lisäosien latautumista, luo tiedosto /data/wordpress/htdocs/wp-content/mu-plugins/redirects.php. Must-use-lisäosat (mu-plugins) latautuvat automaattisesti jokaisella sivulatauksella.

Tärkeää: Tarkista PHP-uudelleenohjauksissa aina isset( $_SERVER['HTTP_HOST'] ), jotta ohjauskoodi ei suoritu komentoriviltä ajettavien wp-cli-komentojen aikana. Käytä pysyviin muutoksiin HTTP-tilakoodia 301 ja väliaikaisiin ohjauksiin koodia 302.

Esimerkki 1: Rinnakkaisverkkotunnuksen ohjaaminen alihakemistoon

WordPressin hyvien käytäntöjen mukaisesti tiedoston alkuun kannattaa lisätä suoran käytön esto (ABSPATH) sekä lisäosan otsikkotiedot (Plugin Name), jotta tiedosto näkyy selkeästi hallintapaneelin Lisäosat > Pakolliset -näkymässä:

<?php
/**
* Plugin Name: Mukautetut uudelleenohjaukset
* Description: Sivustokohtaiset PHP-uudelleenohjaukset.
*/

if ( ! defined( 'ABSPATH' ) ) {
exit;
}

// Varmista, että pyyntö tulee selaimelta eikä WP-CLI:stä
if ( isset( $_SERVER['HTTP_HOST'] ) && strpos( $_SERVER['HTTP_HOST'], 'esimerkki.fi' ) !== false ) {
header( 'Location: https://example.com/fi/', true, 301 );
exit; // Pysäytä suoritus heti otsakkeiden lähettämisen jälkeen
}

Esimerkki 2: Useiden verkkotunnusten keskitetty reititys

Lisää edellisen esimerkin aloitusrivit (ABSPATH sekä lisäosan otsikkotiedot Plugin Name) ja sen jälkeen:

if ( isset( $_SERVER['HTTP_HOST'], $_SERVER['REQUEST_URI'] ) ) {
switch ( $_SERVER['HTTP_HOST'] ) {
// Ohjaa www-osoite pääverkkotunnukseen (säilyttäen polun)
case 'www.example.com':
header( 'Location: https://example.com' . $_SERVER['REQUEST_URI'], true, 301 );
exit;

// Ohjaa rinnakkaisverkkotunnukset pääverkkotunnukseen
case 'example.org':
case 'example.net':
header( 'Location: https://example.com' . $_SERVER['REQUEST_URI'], true, 301 );
exit;

// Ohjaa maakohtaiset verkkotunnukset kielihakemistoihin
case 'example.fi':
header( 'Location: https://example.com/fi/', true, 301 );
exit;

case 'example.de':
header( 'Location: https://example.com/de/', true, 301 );
exit;
}
}

Huom: mu-plugins-tiedostot suoritetaan ennen kuin WordPressin wp_redirect()- ja wp_safe_redirect()-funktiot on ladattu (pluggable.php), joten varhaisissa ohjauksissa tulee käyttää PHP:n omaa header()-funktiota ja exit-komentoa. Jos teet ohjauksia myöhemmin teemassa tai lisäosassa (esim. template_redirect-koukussa), käytä WordPressin wp_safe_redirect()-funktiota.

Pääverkkotunnuksen pakottaminen (Canonical Domain)

Hakukoneet tulkitsevat saman sisällön näkymisen useassa eri osoitteessa (esim. example.com, www.example.com ja example.net) kaksoissisällöksi. Sivustolle kannattaa aina valita yksi ensisijainen pääverkkotunnus (canonical domain), johon kaikki muut rinnakkaisosoitteet ohjataan 301-ohjauksella.

Normaalisti sinun ei tarvitse rakentaa tätä itse:

  1. WordPressin ydin ohjaa kävijät automaattisesti asetuksissa määriteltyyn pääosoitteeseen.

  2. Seravo Plugin pakottaa automaattisesti sekä pääverkkotunnuksen että suojatun HTTPS-yhteyden käytön kaikilla Seravon sivustoilla.

Tietyt monikielisyyslisäosat (kuten WPML tai Polylang) muokkaavat WordPressin omia uudelleenohjaussääntöjä, jolloin automaattinen pääverkkotunnusohjaus saattaa estyä. Näissä tapauksissa voit pakottaa ohjauksen yllä olevan mu-plugins/redirects.php-esimerkin avulla.

home_url()- ja site_url()-asetusten ero

WordPress erottaa toisistaan sivuston julkisen osoitteen ja WordPress-asennustiedostojen sijainnin:

  • home_url() (tietokannassa home, hallintapaneelissa Asetukset > Yleiset > Sivuston osoite (URL)): Osoite, jonka kävijät kirjoittavat selaimeen ja johon sivuston sisäiset linkit osoittavat.

  • site_url() (tietokannassa siteurl, hallintapaneelissa WordPressin osoite (URL)): Hakemisto, jossa WordPressin ydintiedostot ja hallintapaneeli (/wp-admin/) sijaitsevat.

Esimerkki alihakemistoasennuksesta

Jos tietokannassa on määritelty:

home    = https://example.com/store
siteurl = https://example.com
  • Osoite https://example.com/ ohjautuu osoitteeseen https://example.com/store/.

  • Kaikki sivuston sisäiset linkit muodostuvat muotoon https://example.com/store/....

  • WordPressin hallintapaneeli pysyy osoitteessa https://example.com/wp-admin/.

Uudelleenohjausten testaaminen curl-komennolla

Älä testaa uudelleenohjauksia pelkästään selaimella, sillä selaimet tallentavat 301-ohjaukset pysyvästi välimuistiinsa eivätkä välttämättä näytä myöhemmin tehtyjä muutoksia.

Testaa ohjaukset komentoriviltä curl-työkalulla käyttämällä -IL-vipuja (seuraa ohjauksia ja tulosta pelkät HTTP-otsakkeet) sekä Pragma: no-cache -otsaketta palvelinvälimuistin ohittamiseksi:

curl -IL -H "Pragma: no-cache" http://www.example.org

Esimerkkituloste onnistuneesta 301-ohjauksesta:

HTTP/1.1 301 Moved Permanently
Location: https://example.com/
X-Cache: BYPASS

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
X-Cache: MISS

WordPress Rewrite API -sääntöjen tarkistaminen

Jos sivustolla on käytössä useita lisäosia, mukautettuja sisältötyyppejä (Custom Post Types) tai teemaan rekisteröityjä WP Rewrite API -sääntöjä, voit tarkastaa aktiiviset osoitesäännöt WP-CLI:llä:

# Listaa kaikki rekisteröidyt osoitesäännöt
wp rewrite list

# Päivitä osoiterakenteen säännöt (vastaa Asetukset > Osoiterakenne -tallennusta)
wp rewrite flush

Suhteelliset URL-osoitteet ja WP_CONTENT_URL

Voit määrittää wp-content-hakemistolle vaihtoehtoisen osoitteen tai käyttää suhteellisia polkuja määrittelemällä WP_CONTENT_URL-vakion wp-config.php-tiedostossa:

define( 'WP_CONTENT_URL', '/wp-content' );

Yleisimmät virhetilanteet

  • Päättymätön uudelleenohjaussilmukka (ERR_TOO_MANY_REDIRECTS): Tarkista, etteivät nginx-säännöt, mu-plugins/redirects.php, uudelleenohjauslisäosa ja WordPressin omat home-/siteurl-asetukset ohjaa osoitteita ristiin. Jos ohjaat verkkotunnusta HTTP:stä HTTPS:ään PHP:ssä, tarkista $_SERVER['HTTP_X_FORWARDED_PROTO']-otsake äläkä pelkkää $_SERVER['HTTPS']-arvoa.

  • WP-CLI-komennot kaatuvat tai tulostavat varoituksia: Varmista, että kaikki mu-plugins/-hakemiston uudelleenohjaukset on rajattu ehdon if ( isset( $_SERVER['HTTP_HOST'] ) ) sisään, jotta ne eivät aktivoidu komentoriviajoissa.

  • Uusi mukautettu sisältötyyppi tai sivu palauttaa 404-virheen: Osoiterakenteen säännöt ovat vanhentuneet. Päivitä säännöt komennolla wp rewrite flush tai tallentamalla asetukset hallintapaneelin kohdassa Asetukset > Osoiterakenne.

  • Muutettu uudelleenohjaus ei näy selaimessa: Selain on tallentanut aiemman 301-ohjauksen välimuistiinsa. Varmista todellinen tila komennolla curl -IL -H "Pragma: no-cache" <osoite> ja tyhjennä tarvittaessa palvelimen välimuisti komennolla wp-purge-cache.

Katso myös

Oikein toteutetut uudelleenohjaukset pitävät sivuston osoiterakenteen selkeänä, säilyttävät hakukonenäkyvyyden muutosten yhteydessä ja estävät tarpeettoman kuormituksen. Mikäli tarvitset apua monimutkaisten uudelleenohjaussääntöjen toteuttamisessa tai ohjaussilmukoiden selvittämisessä, asiakaspalvelumme auttaa osoitteessa [email protected].

Vastasiko tämä kysymykseesi?