Dokumentacija
Skrajšajte verige preusmeritev
Skrajšajte verige preusmeritev
Preusmeritev pošlje brskalnik na drug naslov, preden se karkoli naloži. Ena je običajna: http:// na https:// ali www na naslov brez njega. Vsak dodaten skok je še ena pot do strežnika in nazaj, pogosto z novo povezavo in TLS rokovanjem. Na telefonu je to na skok nekaj sto milisekund praznega zaslona, še preden se stran sploh začne nalagati. Tudi iskalniki sledijo verigam, a na njih porabijo čas za pregledovanje in po nekaj skokih obupajo.
Kontrolni seznam strani sledi naslovu, ki ga uporablja vaš monitor, do končne strani in pričakuje največ eno preusmeritev.
Kako nastanejo verige
Tipična veriga zraste iz pravil, ki jih je vsakega z dobrim razlogom dodal drug človek na drugem mestu:
| Korak | Naslov | Kdo preusmeri |
|---|---|---|
| 1 | http://www.example.com/ → https://www.example.com/ |
stikalo "force HTTPS" na nadzorni plošči gostovanja |
| 2 | https://www.example.com/ → https://example.com/ |
pravilo za www v .htaccess ali na CDN-ju |
| 3 | https://example.com/ → https://example.com/en/ |
vtičnik za jezike |
Trije skoki, kjer bi zadostoval eden. Popravek je vedno isti: vsaka različica gre naravnost na končni naslov z enim pravilom. http://www.example.com/karkoli mora z enim samim 301 pristati na https://example.com/karkoli.
Drugi pogosti vzroki:
- Poševnica na koncu.
/about→/about/(ali obratno) doda skok, kadar povezave in meni uporabljajo drugo obliko. - Neujemanje naslova v CMS-ju. WordPress preusmeri na naslov iz svojih nastavitev. Če tam piše
https://www.example.com, strežnik pa obiskovalce pošilja na naslov brezwww, se pravili bijeta: drug skok ali zanka. - CDN in izvorni strežnik. Cloudflare preusmeri
httpnahttps, nato strežnik preusmeriwwwna golo domeno. Vsako pravilo je samo zase v redu, skupaj pa naredita dva skoka. - Stare preusmeritve, ki kažejo na stare preusmeritve.
/staro→/novejse→/najnovejse, po dveh prenovah.
Preverite sami
Sledite verigi in izpišite vsak korak. Namesto example.com vpišite svojo stran:
curl -sIL http://www.example.com/ | grep -iE '^(HTTP/|location:)'
Vsaka vrstica location: je ena preusmeritev. Popravljeno pomeni eno vrstico location: ali nobene, kadar začnete na končnem naslovu.
Vse štiri različice preizkusite naenkrat:
for u in http://example.com/ http://www.example.com/ https://example.com/ https://www.example.com/; do
curl -sL -o /dev/null -w "$u → %{url_effective} (%{num_redirects} redirects)\n" "$u"
done
Vsaka vrstica se mora končati na istem naslovu z 1 ali 0 preusmeritvami.
Opomba: Brskalniki, ki glavo HSTS vaše strani že poznajo, skok z
http://opravijo interno. Novi obiskovalci, pajki iskalnikov incurlga ne, zato ga štejte.
Kako popraviti
Ugotovite, od kod prihaja posamezen skok (izpis curl pokaže vrstni red), končni naslov naj pozna eno samo mesto, druga pa izklopite ali prepišite. Izberite, do česar imate dostop.
WordPress
- Settings → General: WordPress Address (URL) in Site Address (URL) morata biti natanko končni naslov, z
https://in z ali brezwwwtako, kot preusmerja strežnik. Neujemanje tu povzroči dodaten skok na vsaki strani. - Vtičniki za preusmeritve. V vtičniku Redirection (Tools → Redirection) ali v preusmeritvah Yoast SEO Premium oziroma Rank Math poiščite verige: če
/starokaže na/novoin/novona/najnovejse, naj/starokaže neposredno na/najnovejse. - Vtičniki za HTTPS. Če na
httpspreusmerja Really Simple SSL in tudi vaš ponudnik gostovanja, obdržite eno. Preusmeritev vtičnika se izvede šele, ko se zažene PHP, zato je strežniško pravilo hitrejše. - Vtičniki za jezike. Če
/preusmeri na/en/, lahko WPML in Polylang privzeti jezik strežeta brez jezikovne mape ali nehata preusmerjati po jeziku brskalnika. S tem skok za domačo stran izgine. - Trajne povezave. V menijih in vsebini uporabljajte povezave v isti obliki kot v Settings → Permalinks (s poševnico na koncu ali brez), da jih WordPress ne preusmerja.
Nato počistite predpomnilnik strani (WP Rocket, LiteSpeed Cache, predpomnilnik ponudnika gostovanja).
cPanel
cPanel ima dve ločeni stikali, ki ju je lahko zložiti eno na drugo: Domains → Domains → Force HTTPS Redirect in pravilo za www v Domains → Redirects. Skupaj naredita, da http://www potrebuje dva skoka.
Izklopite obe in namesto njiju uporabite eno pravilo v .htaccess:
- Odprite Files → File Manager, pojdite v
public_htmlin v Settings označite Show Hidden Files (dotfiles). - Uredite
.htaccessin blok iz zavihka Apache in LiteSpeed postavite čisto na vrh, pred razdelek# BEGIN WordPress, če obstaja. - Preizkusite z zanko
curlzgoraj.
Plesk
- Websites & Domains → example.com → Hosting & DNS → Hosting: pri Preferred domain nastavite želeno obliko (z ali brez
www) in vklopite Permanent SEO-safe 301 redirect from HTTP to HTTPS. - Odstranite morebitna dodatna pravila za
wwwalihttps, ki ste jih z istim namenom dodali v.htaccessali v Apache & nginx Settings. - Vse štiri različice preizkusite z zanko
curlzgoraj. Čehttp://wwwše vedno potrebuje dva skoka, Pleskova stikala izklopite in uporabite eno pravilo (zavihek nginx ali Apache).
nginx
Običajna napaka je blok za vrata 80, ki ohrani gostitelja (https://$host$request_uri), zato gre http://www najprej na https://www. Končnega gostitelja zapišite neposredno. Na Debianu in Ubuntuju je stran v /etc/nginx/sites-available/example.com, na Rocky, Alma in CentOS v /etc/nginx/conf.d/example.com.conf:
# Vsak http zahtevek, z www ali brez: en skok na končni naslov.
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
# https://www: prav tako en skok.
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
return 301 https://example.com$request_uri;
}
Certbot doda bloke if ($host = www.example.com) { return 301 https://$host$request_uri; }; ti ohranijo www in ustvarijo dodaten skok. Zamenjajte jih z bloki zgoraj.
Preizkusite in uveljavite:
sudo nginx -t && sudo systemctl reload nginx
Apache in LiteSpeed
Eno pravilo za http in www hkrati, na vrhu .htaccess ali v virtualnem gostitelju:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]
Odstranite starejša pravila, ki naredijo samo eno od obojega, sicer se še vedno izvedejo prva. Če imate raje www, uporabite RewriteCond %{HTTP_HOST} !^www\. [NC] in https://www.example.com.
Opozorilo: Za Cloudflarom ali drugim posrednikom je
%{HTTPS}offtudi za obiskovalce nahttps, in to pravilo naredi zanko. Namesto prvega pogoja uporabiteRewriteCond %{HTTP:X-Forwarded-Proto} !httpsali preusmeritev naredite na Cloudflaru (zavihek Cloudflare).
Na lastnem strežniku preizkusite in znova naložite (na Rocky, Alma in CentOS namesto apache2 uporabite httpd):
sudo apachectl configtest && sudo systemctl reload apache2
Cloudflare
Always Use HTTPS (SSL/TLS → Edge Certificates) pošlje http://www na https://www; ločena preusmeritev za www nato doda drugi skok. Naredite eno pravilo za preusmeritev, ki ujame oboje:
-
Pojdite v Rules → Redirect Rules in Create rule.
-
Custom filter expression, nato Edit expression:
(http.host eq "www.example.com") or (not ssl) -
URL redirect: tip Dynamic, izraz
concat("https://example.com", http.request.uri.path), status 301, označite Preserve query string in Deploy.
Da se pravilo izvede, potrebuje gostitelj www DNS zapis prek posrednika (oranžen oblaček). Nato preverite, da izvorni strežnik ne preusmerja znova: če WordPress ali strežnik obiskovalce še vedno pošilja na www, nastane zanka. Rob in izvorni strežnik se morata strinjati o enem končnem naslovu.
Node.js in Next.js
Next.js privzeto preusmeri /about/ na /about (308), z trailingSlash: true pa obratno. V povezavah uporabljajte isto obliko. Za www zadostuje eno pravilo v next.config.js:
module.exports = {
async redirects() {
return [
{
source: '/:path*',
has: [{ type: 'host', value: 'www.example.com' }],
destination: 'https://example.com/:path*',
permanent: true,
},
];
},
};
Na Vercelu ali Netlifyju preusmeritev med www in golo domeno raje nastavite v nastavitvah domen projekta in obdržite samo eno od obeh. Če pred aplikacijo stoji nginx, preusmeritev postavite tja (zavihek nginx) in ne na obe mesti.
Gostovane platforme
Shopify, Wix, Squarespace in Webflow vsako drugo domeno z enim skokom preusmerijo na tisto, ki jo označite kot primarno. Preverite, da je primarna domena tista, na katero povezujete: v Shopifyju Settings → Domains, v Webflowu privzeta domena v Site settings → Publishing. Veriga na teh platformah običajno izvira iz vaših vnosov na seznamu preusmeritev URL-jev platforme, ki kažejo na naslove, ki se znova preusmerijo.
Potrdite popravek
Znova poženite zanko curl iz razdelka Preverite sami, nato v PulseKeeperju odprite tarčo in na zavihku Kontrolni seznam kliknite Preveri zdaj. Postavka se v nekaj minutah obarva OK, ne šele ob naslednjem dnevnem preverjanju.