Dokumentacija
Preusmerite HTTP na HTTPS
Preusmerite HTTP na HTTPS
Obiskovalci redko vtipkajo https://. Vpišejo example.com, kliknejo staro povezavo ali odprejo zaznamek izpred let, in brskalnik začne s http://. Če strežnik na tak zahtevek odgovori kar s stranjo, obisk teče nešifrirano: gesla, podatki iz obrazcev in piškotki potujejo kot navadno besedilo, brskalnik pa stran označi z Ni varno. Google poleg tega vidi dve kopiji vsake strani, eno na vsakem protokolu.
Rešitev je ena trajna preusmeritev: vsak naslov http:// odgovori s 301 (ali 308) in pokaže na isti naslov na https://. Kontrolni seznam strani manjkajočo preusmeritev šteje za kritično.
Kaj pričakuje kontrolni seznam
Odgovor na http:// |
Rezultat |
|---|---|
301 ali 308 na https://… |
OK |
302, 303 ali 307 na https://… |
opozorilo: preusmeritev je začasna, zato iskalniki obdržijo naslov http:// |
200 s stranjo ali preusmeritev drugam |
napaka: stran se streže brez šifriranja |
| vrata 80 zaprta | informacija: http:// se sploh ne odpre, zato nič ne uhaja, obiskovalci, ki vpišejo gol naslov, pa dobijo napako |
Preusmeritev naj gre naravnost na končni naslov. http://example.com → https://example.com/ je en skok. Veriga, kot je http://example.com → http://www.example.com → https://www.example.com, ob vsakem prvem obisku zapravlja čas (glejte En naslov, z www ali brez).
Preverite sami
Namesto example.com vpišite svojo stran:
curl -sI http://example.com | grep -iE '^(HTTP|location)'
curl -sI http://example.com/some/page?x=1 | grep -iE '^(HTTP|location)'
Popravljeno je videti takole, v drugem primeru z ohranjeno potjo in poizvedbo:
HTTP/1.1 301 Moved Permanently
Location: https://example.com/
Če prva vrstica pravi 200, preusmeritve ni. Če pravi 302 ali 307, je preusmeritev začasna.
Kako popraviti
Najprej potrebujete veljaven certifikat na https://; preusmeritev na pokvarjen certifikat zaklene vse obiskovalce. Nato izberite tisto, do česar imate dostop. Preusmeritev nastavite samo na enem mestu: dve plasti, ki vsaka preusmerjata (na primer Cloudflare in .htaccess), sta vir zank.
WordPress
- V Settings → General nastavite WordPress Address (URL) in Site Address (URL) na
https://example.com. Nato se znova prijavite. - WordPress sam ne preusmerja s
http://nahttps://. Preusmeritev dodajte pri gostovanju (zavihek cPanel, Plesk ali.htaccess) ali z brezplačnim vtičnikom Really Simple SSL (zdaj se imenuje Really Simple Security): po aktivaciji vklopite SSL in njegovo preusmeritev. Kjer ponuja preusmeritev 301 v.htaccess, jo izberite namesto preusmeritve v PHP-ju: je hitrejša in pokrije tudi slike in datoteke. - Počistite predpomnilnik strani (WP Rocket, LiteSpeed Cache, predpomnilnik gostitelja).
Če sta polji z naslovoma sivi, sta nastavljeni v wp-config.php (WP_HOME in WP_SITEURL); spremenite ju tam.
cPanel
- Preverite, da ima domena certifikat: Security → SSL/TLS Status jo mora kazati kot pokrito (AutoSSL ga pri večini gostiteljev izda brezplačno).
- Odprite Domains → Domains.
- Pri domeni vklopite Force HTTPS Redirect.
Če stikala ni ali je sivo, dodajte pravilo iz zavihka Apache v .htaccess v korenski mapi strani (File Manager, z vklopljenim Show Hidden Files).
Plesk
- V Websites & Domains → example.com → SSL/TLS Certificates preverite, da je nameščen veljaven certifikat (Let's Encrypt je brezplačen).
- Odprite Websites & Domains → example.com → Hosting & DNS → Hosting (v starejših različicah Plesk Hosting Settings).
- Pod Security preverite, da je SSL/TLS support vklopljen in certifikat izbran, nato vklopite Permanent SEO-safe 301 redirect from HTTP to HTTPS.
- Kliknite OK (ali Apply).
DirectAdmin
- Preverite, da ima domena certifikat: Account Manager → SSL Certificates (Let's Encrypt je brezplačen).
- Odprite Account Manager → Domain Setup in kliknite domeno.
- Vklopite Force SSL with https redirect in shranite.
nginx
Vratom 80 dajte svoj blok server, ki ne dela nič drugega kot preusmerja. Je v datoteki vaše strani: /etc/nginx/sites-available/example.com na Debianu in Ubuntuju, /etc/nginx/conf.d/example.com.conf na Rocky, Alma in CentOS.
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
V vrstico return vpišite svoj glavni naslov (z www ali brez), da obe različici prideta do njega v enem skoku. Iz tega bloka odstranite root, location in nastavitve PHP: na vratih 80 ne sme streči ničesar.
sudo nginx -t && sudo systemctl reload nginx
Če uporabljate Certbot, enakovreden blok doda sudo certbot --nginx --redirect -d example.com -d www.example.com.
Apache in LiteSpeed
Z dostopom do strežnika (Apache). V navideznem gostitelju za vrata 80 (/etc/apache2/sites-available/example.com.conf na Debianu in Ubuntuju, datoteka v /etc/httpd/conf.d/ na Rocky, Alma in CentOS):
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
sudo apachectl configtest && sudo systemctl reload apache2
(Na Rocky, Alma in CentOS httpd namesto apache2.)
Brez dostopa do strežnika (deljeno gostovanje, LiteSpeed). To postavite na vrh datoteke .htaccess v korenu strani, nad blok # BEGIN WordPress, če obstaja:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Vrstica z X-Forwarded-Proto prepreči zanko, kadar proxy ali CDN pred strežnikom z obiskovalcem že govori HTTPS, z vašim strežnikom pa navaden HTTP.
Cloudflare
- Odprite domeno in pojdite na SSL/TLS → Overview. Način šifriranja nastavite na Full (strict) (vaš strežnik potrebuje veljaven certifikat; deluje tudi brezplačen Cloudflare Origin Certificate).
- Pojdite na SSL/TLS → Edge Certificates in vklopite Always Use HTTPS. Cloudflare na vsak zahtevek
http://odgovori s301nahttps://.
Opozorilo: Načina Flexible ne kombinirajte s preusmeritvijo na strežniku. V načinu Flexible Cloudflare z vašim strežnikom govori po navadnem HTTP, strežnik preusmeri na HTTPS, Cloudflare znova vpraša po HTTP, brskalnik pa se ustavi z napako too many redirects. Uporabite Full (strict) ali preusmeritev prepustite samo Cloudflaru.
IIS in ASP.NET
Namestite modul URL Rewrite za IIS in v web.config strani dodajte to pravilo:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
redirectType="Permanent" pošlje 301. Stran potrebuje tudi vezavo http na vratih 80, sicer zahtevek do pravila sploh ne pride.
V ASP.NET Core app.UseHttpsRedirection() privzeto preusmerja z začasno 307. Naredite jo trajno:
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = StatusCodes.Status308PermanentRedirect;
});
Gostovane platforme
Shopify, Wix, Squarespace in Webflow certifikat izdajo in http:// na https:// preusmerijo sami, ko je domena povezana. Če kontrolni seznam tam javi težavo, preverite, da je domena povezana prek nastavitev domen na platformi (ne samo usmerjena nanjo) in da je možnost SSL na platformi vklopljena.
Potrdite popravek
Znova poženite ukaza curl iz razdelka Preverite sami, nato v PulseKeeperju odprite tarčo in na zavihku Kontrolni seznam kliknite Preveri zdaj. Če želite, da brskalniki od drugega obiska naprej http:// sploh preskočijo, je naslednji korak HSTS.