Siirry pääsisältöön

WordPress-uudelleenkirjoitukset

WordPressissä on monia tapoja tehdä uudelleenohjaus. Tässä oppaassa käymme läpi joitakin niistä.

Päivitetty tällä viikolla

WordPress/PHP perusuudelleenohjaukset

PHP-koodissa voit ilmaista minkä tahansa uudelleenohjauslogiikan ilman, että olet rajoitettu nginx:n rajoitettuihin ominaisuuksiin. Esimerkiksi tiedostossa mu-plugins/redirects.php voisi olla seuraava sisältö:

<?php 
// Redirect any requests for www.example.fi or example.fi to example.com/fi/
if ( isset($_SERVER['HTTP_HOST']) && strpos($_SERVER['HTTP_HOST'], 'esimerkki.fi') !== false ) {
header("Location: https://example.com/fi/", true, 301);
exit; // Stop WordPress execution immediately as redirect headers were emitted
}

Hieman monimutkaisempi esimerkki olisi:

switch ($_SERVER['HTTP_HOST']) { 
# Enforce no www
# Use 301 to make redirect permanent and cached
# Use 302 for temporary (non-cached) redirects
case "www.example.com":
header("Location: https://example.com/", true, 301);
break;

# Multiple extra domains to same canonical domain
# Note! Many plugins already do this automatically, e.g. Seravo Plugin or Polylang
case "example.org":
case "exmple.net":
case "example.info":
header("Location: https://example.com/", true, 301);
break; # Localized domain to subfolder case "example.fi": header("Location: https://example.com/fi/", true, 301); break;

# Localized domain to subfolder
case "example.de":
header("Location: https://example.com/de/", true, 301);
break;

default:
header("Location: https://www.example.com/en/", true, 301);
}
exit; // Stop WordPress execution immediately as redirect headers were emitted

Vanhan verkkotunnuksen HTTP-pyyntöjen uudelleenohjaus uuteen verkkotunnukseen

Vaihda kaikki example.com-maininnat example.net-maininnoiksi WordPress-asetuksissa ja sisällössä. Kun sivuston asetukset ja sisältö ovat kunnossa, luo tiedosto /data/wordpress/htdocs/wp-content/mu-plugins/redirects.php:

<?php 
// Check that HTTP_HOST is set (so code is not run on wp-cli invocations)
if ( isset($_SERVER['HTTP_HOST']) && isset($_SERVER['REQUEST_URI']) ) {
switch ( $_SERVER['HTTP_HOST'] ) {
# Redirect all traffic to the new domain. This custom redirect is needed on
# sites where the built-in WordPress canonical domain does not fully work,
# e.g. sites with WPML or other odd plugins.
#
# Use 301 to make redirect permanent and cached
# Use 302 for temporary (non-cached) redirects
case 'example.com':
case 'www.example.com':
header('Location: https://example.net' . $_SERVER['REQUEST_URI'], true, 301);
exit; // Stop WordPress execution immediately as redirect headers were emitted
}
}

Pakota käyttöön pääverkkotunnus

Google ja muut hakukoneet eivät pidä siitä jos täsmälleen sama sisältö on saatavilla useilla verkkosivustoilla. Jos verkkosivustolla esimerkiksi example.com on myös domain example.net, se ei saisi tarjota samaa sisältöä molemmilla domaineilla, vaan valita, kumpi domain on pääverkkotunnus ja ohjata kaikki muut domainit siihen. Sama pätee alidomainien osalta. Verkkosivustojen tulisi valita, ovatko ne saatavilla osoitteessa www.example.com vai example.com ja ohjata toinen osoite toiseen.

Normaalisti verkkosivustojen kehittäjien ei tarvitse huolehtia tästä, koska WordPress-ydin ohjaa kävijät automaattisesti pääverkkotunnukseen kotisivun asetusten perusteella.

Myös kaikki sivustot, joissa on Seravo-laajennus ottavat automaattisesti käyttöön sekä pääverkkotunnuksen että HTTPS:n käytön varmistaakseen, että kaikki vierailut ovat suojattuja.

Tietyt laajennukset (esim. WPML), jotka sekoittavat WordPress Rewrite API -asetukset voivat kuitenkin rikkoa tämän ja näissä harvinaisissa tapauksissa kehittäjän on ehkä luotava mukautettu /data/wordpress/htdocs/wp-content/mu-plugins/redirect.php-tiedosto, jonka sisältö on seuraava:

<?php
// Redirect any requests for www.example.com to example.com (non-www)
if ( isset($_SERVER['HTTP_HOST']) && isset($_SERVER['REQUEST_URI']) && $_SERVER['HTTP_HOST'] == 'www.example.com' ) {
header("Location: https://example.com/" . $_SERVER['REQUEST_URI'], true, 301);
exit; // Stop WordPress execution immediately as redirect headers were emitted
}

Testaa uudelleenohjaus komennolla curl -IL -H Pragma:nocache <url>, jotta voit varmistaa, että se toimii

WordPressin get_home()- ja get_siteurl()-funktioiden eroavaisuuksien ymmärtäminen

home_url() (wp_options home) on se, johon olet asettanut kotisivusi valitsemalla Yleiset > Asetukset ”Sivuston osoite (URL)” -kentän.

site_url() (wp_options siteurl) on aina se sijainti, johon pääset lisäämällä /wp-admin loppuun, kun taas home_url() ei ole luotettavasti tämä sijainti.

Esimerkki:

Jos sinulla on:

home = https://example.com/store
siteurl = https://example.com

Tästä seuraa että:

Tässä toteutuksessa voisi esimerkiksi olla WordPress WooCommerce-sovelluksella, joka toimii päätepisteessä /store, kun taas juurihakemistoa / voitaisiin käyttää johonkin kokonaan muuhun kuten esimerkiksi staattiseen verkkosivustoon.

Uudelleenohjauksien testaus

Käytä curl-komentoa uudelleenohjauksien testaamiseen. Selaimen käyttö testaukseen ei toimi, koska selain tallentaa useimmissa tapauksissa ensimmäisen uudelleenohjauksen välimuistiin, minkä jälkeen muutokset eivät näy selaimella testattaessa. Curl-komennon käyttö Pragma:no-cache määrityksellä varmistaa, että välimuistia ei käytetä lainkaan ja se tulostaa location: -otsikot, jotka osoittavat selvästi mikä uudelleenohjaus on kyseessä.

Esimerkki:

curl -IL -H Pragma:no-cache www.example.org 
HTTP/1.1 200 OK
X-Cache: BYPASS
Location: https://example.com/
Content-Length: 100

HTTP/1.1 200 OK
X-Cache: BYPASS
Content-Length: 1270

WordPress Rewrite API -sisällön tarkistaminen

Jos sivustolla on useita uudelleenohjauslaajennuksia, kielilaajennuksia ja ehkä jopa mukautettuja WP Rewrite API -sääntöjä rekisteröitynä teemaan tilanne voi muuttua monimutkaiseksi. Helpoin tapa tarkistaa kaikki nykyiset uudelleenohjaukset on käyttää wp-cli:tä:

wp rewrite
usage: wp rewrite flush [--hard]
or: wp rewrite list [--match=<url>] [--source=<source>] [--fields=<fields>] [--format=<format>]
or: wp rewrite structure <permastruct> [--category-base=<base>] [--tag-base=<base>] [--hard]

wp rewrite flush
Success: Rewrite rules flushed.

wp rewrite list
+----------------+-----------------------------+-------------------------+
| match | query | source |
+----------------+-----------------------------+-------------------------+
| sitemap\.xml$ | index.php?the_seo_framework | other |
| | _sitemap=xml | |
| sitemap\.xsl$ | index.php?the_seo_framework | other |
| | _sitemap=xsl | |
| ^wp-json/?$ | index.php?rest_route=/ | other |
| ^wp-json/(.*)? | index.php?rest_route=/ | other |
| | $matches[1] | |
| ^index.php/ | index.php?rest_route=/ | other |
| wp-json/?$ | | |
| ^index.php/ | index.php?rest_route=/ | other |
| wp-json/(.*)? | $matches[1] | |
| case/?$ | index.php?post_type=case | other |
| case/feed/ | index.php?post_type=case& | other |
| (feed|rdf|rss| | feed =$matches[1 | |
| rss2|atom)/?$ | | |
...​

Suhteelliset URL-osoitteet ja vaihtoehtoiset wp-content-sijainnit

WordPressissa voidaan määrittää vaihtoehtoinen sijainti wp-content-hakemistolle määrittämällä muuttuja WP_CONTENT_URL. Tätä voidaan käyttää myös suhteellisten URL-osoitteiden määrittämiseen korvaamalla oletusarvo https://example.com/wp-content yksinkertaisesti /wp-content. Katso esimerkki Seravo WordPress -projektimallin wp-config.php-tiedoston rivikommenteista.

Vastasiko tämä kysymykseesi?