Support » Allmänna frågor » Korrekt 301:or på SSL-cert

  • Hej! Jag har SSL-cert men får det inte att funka 100%. Jag vill inte ha något tillägg för detta så jag blir beroende av uppdateringar av det i all evighet. Och jag vill ha det så snabbt och korrekt som möjligt. Så har googlat, sökt i forum och i bloggar utan att hitta något som fixar det till 100%.

    Jag vill ha:

    http:// utan www till https://www.
    http://www. till https://www.
    https:// utan www till https://www.

    och sedan även så det blir så för alla bildlänkar.

    Det jag kommit fram till så är långt är att ändra alla http: // till https: // med hjälp av tillägget Better Search Replace. Ett tillägg som sedan raderas. Sen ändra till https: // i WordPress-panelen under Inställningar > Allmänt. MEN sedan är det stopp. Vissa säker att detta ska räcka med många säger att man även ska lägga in en kodsnutt i htaccess för att allt ska bli 100% korrekt. Men jag får inget att funka då. Jag har kommit så långt att jag får allt att funka förutom http: // utan www till https: //www. och att bildadresserna blir korrekt 301:ade.

    Hur kan det vara så få som skrivit om detta? 🙂

    EDIT: fick ändra lite på http: // för att försöka få inlägget godkänt. För har skrivit detta en gång tidigare och då stod de att en Modorator skulle godkänna det innan de kom fram men har inte sett det sedan dess. 🙂 Så provar så här. 🙂

Visar 1 svar - 1 till 3 (av 3 totalt)
  • Moderator tobifjellner (Tor-Bjorn Fjellner)

    (@tobifjellner)

    WordPress-hemmapulare, Projektledare, Författare, Översättare och Vänlig Själ

    Hej,

    Dina två inlägg låg och väntade i kön för moderering. Jag godkände detta och arkiverade den andra tråden eftersom den var snarlik.

    Omdirigering mellan adresser med eller utan www sköter WordPress ganska bra. Det klarar också att omdirigera från http till https, men där finns det en sak man kan snubbla på:
    Om adressen för huvudsidan är https, men du någonstans i html-koden för sidan försöker att inkludera en resurs (bild, javascript-fil, CSS eller kanske en iframe med en annan webbsida) som anropas via http kommer webbläsaren troligen att vägra hämta denna fil, för att inte få ”blandad säkerhetsnivå” i innehållet.

    Men: om ditt webbhotell har stöd för .htaccess (vilket de allra flesta har), så kan du ganska enkelt göra så att alla anrop till http och/eller utan www direkt får svaret 301 (flyttat permanent). Jag försöker ge några kommandon för detta en bit ned.
    Men det är ändå viktigt att du överallt på webbplatsen ser till att det står rätt.
    Den allra smidigaste lösningen (även om WordPress tyvärr inte brukar använda den vägen) är att helt enkelt utesluta protokollet och webbserverns adress. När du länkar till en adress som börjar med ett snedstreck kommer webbläsaren att använda samma protokoll som gäller för den redan hämtade sidan (d.v.s. https) och samma servernamn, d.v.s. med ”www”. Så när du lägger in en bild kanske du då skriver (eller ändrar till) <img src="/wp-content/uploads/2019/01/minbild.jpg">

    Under övergångsperioden när jag flyttar en webbplats från http till https använder jag https://wordpress.org/plugins/really-simple-ssl/ för att i farten ändra länkar mot http till https. Detta tillägg tar inte så mycket datorkraft, men kan säkert stjäla några ms om man analyserar mycket noga.

    Så .htaccess, då.
    Lägg till följande i början av .htaccess, före snutten från WordPress:

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^domain\.com [NC]
    RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301]
    RewriteCond %{SERVER_PORT} 80 
    RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301]
    </IfModule>

    IfModule innebär att dessa kommandon bara körs om mod_rewrite.c finns på webbservern.
    Raden efter aktiverar i så fall modulen.
    RewriteCond är ett matchningsvillkor. Den aktuella omskrivningen kommer endast att utföras om serverdelen i anropets URL börjar med domain.com. Observera att en punkt . matchar vilket tecken som helst. För att specifikt matcha en punkt måste man lägga till \ före. flaggan NC innebär att jämförelsen ska göras utan att vara känslig för skiftläge.
    Följande rad (som alltså bara körs om anropet gått till adressen utan www skickar svaret ”flyttat permanent (301)” och anger specifikt att https och www ska användas. Allt som kom efter servernamnet skickas tillbaka oförändrat. $1 är en tillfällig variabel som innehåller allt som matchade innehållet innanför parentesen i första halvan av raden – (.*) punkten matchar, som jag skrev, vilket tecken som helst. Asterisken betyder föregående tecken noll eller flera gånger, d.v.s. hela strängen. ^ matchar början av strängen.
    Flaggan L (last) betyder att om denna omskrivning aktiverades ska tolkningen av .htaccess avbrytas och svaret skickas omedelbart.

    Sedan följer nästa rewritecond: om anropet kom in till port 80 (d.v.s. http) aktiveras denna regel. Själva omskrivningen är sedan exakt samma som för den första regeln.

    Återkom gärna och berätta hur det går.

    Trådstartare PatrikHax

    (@patrikhax)

    STORT TACK för detta inlägg! Verkligen TACK! Det är det överlägset bästa svaret jag fått på ett forum eller support någonsin. 🙂 Läser det om och om igen så jag förstår 100% till slut. 🙂 Jag har efter mycket om och men fått denna kodsnutt av webbhotellet jag har och äntligen fått det att fungera förutom på en punkt och det är att

    http://www.domain.com/wp-content/uploads/2019/01/minbild.jpg går till https://www.domain.com/wp-content/uploads/2019/01/minbild.jpg korrekt men http://domain.com/wp-content/uploads/2019/01/minbild.jpg går till https://domain.com/wp-content/uploads/2019/01/minbild.jpg precis som https://domain.com/wp-content/uploads/2019/01/minbild.jpg inte går till något annat.

    Ser att många missat att fixa detta (till och med swedbank) men hos många funkar det och fått bekräftelse på att det går att fixa med .htaccess men inte hur..

    Har du/ni några tips på att förfina kodsnutten nedan och få in en kodsnutt som fixar det med bilderna också? 🙂

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^domain.sem
    RewriteRule (.*) http://www.domain.se/$1 [R=301,L]
    
    #RewriteEngine On
    #RewriteCond %{HTTP:HTTPS} !on
    #RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    # If using www
    #RewriteCond %{HTTP_HOST} ^www.(.)$ [NC]
    #RewriteCond %{HTTP:HTTPS} !on
    #RewriteRule . https://domain.se%{REQUEST_URI} [R,L]
    
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress
    Moderator tobifjellner (Tor-Bjorn Fjellner)

    (@tobifjellner)

    WordPress-hemmapulare, Projektledare, Författare, Översättare och Vänlig Själ

    Ditt svar ovan hamnade också i moderering… Kan bero på att du hade ett antal länkar i din kommentar.

    Låt oss då analysera koden du gav.

    Första blocket:

    RewriteCond %{HTTP_HOST} ^domain.sem
    RewriteRule (.*) http://www.domain.se/$1 [R=301,L]

    Detta block kommer att användas om värdadressen börjar på domain*sem (stjärnan matchar i detta fall vilket ett tecken som helst). Om du här skriver in din egen domän och inser att du inte ska ha med ett extra ”m” i slutet av ditt domännamn, så kommer du att tvinga omdirigering till http (alltså inte https) med www i början av domännamnet.
    Att domänadressen skrivits med bara punkt (som matchar vilket tecken som helst) gör i detta fall inte så mycket, eftersom besökaren då ändå inte skulle hamna på din webbplats. Men själva matchningen i sig själv kanske kan ta någon mikrosekund extra…

    Block nummer två:

    #RewriteEngine On
    #RewriteCond %{HTTP:HTTPS} !on
    #RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

    Om https INTE är på kommer omdirigering att ske till exakt samma adress som anropades, men med https. Dock tror jag inte att denna omdirigering kommer att göras som en definitiv adressändring (301), utan som en tillfällig (302), vilket gör att t.ex. google inte flyttar över dina trafikpoäng till https, utan låter dem ligga utspridda mellan olika adressvarianter.

    Dessutom: Om du fixar till block ett och någon anropar din webbplats utan www kommer block ett först att svara med att lägga till www och säga att det ska vara http. Sedan anropar webbläsaren en gång till och får nu veta att ”Nä, det ska vara med https”. Så då blir det till att anropa en tredje gång. Puh. Flera sådana omdirigeringar på raken gör att det tar längre tid.

    Block tre:

    # If using www
    #RewriteCond %{HTTP_HOST} ^www.(.)$ [NC]
    #RewriteCond %{HTTP:HTTPS} !on
    #RewriteRule . https://domain.se%{REQUEST_URI} [R,L]

    Om värdnamnet börjar med www OCH http inte är aktivt görs en MJUK omdirigering till domännamnet UTAN www men med https aktivt.

    Sammantaget:
    Nu blev det riktigt rörigt. Jag tror att om du skulle fixa till den första regeln finns det stor risk att vissa anrop fastnar i sluten cirkel av omdirigeringar…

    EditAdd:
    Vid närmare eftertanke: Block tre kommer aldrig att köras. Block två kommer att kliva in om anropet inte är till https, och därmed kommer villkoret i block tre aldrig att kunna bli sant. Därför vore det bättre att inte ha med det, eftersom webbserverprogrammet för varje anrop till WordPress, bildfiler, CSS-filer o.s.v. tvingas att analysera ett extra villkor innan körningen kan gå vidare…

Visar 1 svar - 1 till 3 (av 3 totalt)
  • Ämnet ”Korrekt 301:or på SSL-cert” är stängt för nya svar.