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 emittedVanhan 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ä:
https://example.com/ ohjaa osoitteeseen https://example.com/store/
https://example.com/store/ löytyy kaikista sivuston sisäisistä linkeistä
https://example.com/wp-admin/ pysyy WordPressin hallintaosoitteena
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.
