301 Redirect – Ultimativ dansk guide til htaccess redirect 301
Er det mon htaccess redirect eller PHP omdirigering, og hvornår skal man bruge vHost ? Det kan være svært at vide hvornår man skal redirecte på en måde frem for en anden.
Her i dette indlæg, som nok er danmarks største 301 redirect guide, viser jeg dig hvordan og hvornår det er bedst at bruge det ene frem for det andet. Forkerte omdirigeringer kan have store konsekvenser for serverens performance.
Ultimativ guide til danske redirects
Dette indlæg er en del af en større samling af tips og viden om redirect
I dag er det essentielt at have viden om, hvordan man implementerer en redirect og forstå, hvad en redirect indebærer, når man opretter en hjemmeside. Det er klogt at starte på den rette måde fra begyndelsen, da det forkerte valg kan have en større indvirkning end man måske forventer. Følgende råd og tips er rettet mod en bred vifte af hjemmesider på forskellige webhostingløsninger og har til formål at bidrage med professionel vejledning og informativ indsigt.
Dette er danmarks største guide med alt du behøver vide om 301 redirect på dansk
301 redirect checker – Omdirigerer din url korrekt?
Ved du om din hjemmeside omdirigerer korrekt? og ved du om der omdirigeres direkte til den nye url eller gennem flere omdirigeringskæder? det kan du herunder finde ud af. Udfyld med den url du vil teste, og du får svaret.
Hvorfor udføre omdirigeringer?
Hvorfor udføres omdirigeringer? Der kan opstå behov for at ændre URL-strukturen på ens hjemmeside, slette eller flytte sider, eller endda skifte domænenavnet. Ved hjælp af omdirigeringer kan man sikre, at både brugere og søgemaskiner bliver opmærksomme på disse ændringer. Hvis du for eksempel har flyttet en side, er det ikke bare en god idé, men et nødvendigt skridt at omdirigere al trafik fra den gamle URL til den nye URL. Dette sikrer, at brugerne havner det rette sted, og at eventuel værdi (linkværdi) følger med til den nye URL.
Det er derfor afgørende, at man udfører en korrekt omdirigering og ikke bare visuelt omdirigerer brugere og andre besøgende. Man bør informere brugerens browser, og især søgemaskinerne, om at der forekommer en omdirigering. Hvis omdirigeringen udføres korrekt, sker dette automatisk. Dog har jeg set mange tilfælde, hvor folk har brugt en JavaScript-omdirigering eller meta-refresh, men stadig fejlagtigt tror, at dette er en ægte 301-omdirigering. Javascript eller HTML redirect, er ikke en reel redirect.
Det vigtigste element er at tilføje de såkaldte headere, som f.eks. “301 Moved Permanently”. Det er denne header, der tydeligt angiver, at en side er blevet flyttet til et andet sted.
HTML Redirect og Javascript Redirect
Begge typer omdirigeringer, er nogle man vil kunne bruge i forskellige tilfælde. Man skal dog være obs på at det ikke anses som reelle omdirigeringer der fortæller browser og søgemaskiner at en side er flyttet permanent.
HTML redirect / HTML omdirigering
HTML / META redirect kan bruges, hvis man fx gerne vil omdirigere brugeren, uden at browseren registrere at siden er flyttet eller lign. Det kan fx være i tilfælde af at du har en webform, og når den er udfyldt vil du lige vise en hurtig besked eller tekst. Efter nogle sekunder bliver brugeren så omdirigeret til en anden side, eller siden opdaterer sig selv. Det kan være nyttigt som en handlingsbaseret omdirigering.
Meta refresh ser ud sådan:
<meta http-equiv="refresh" content="3"; url="ny webadresse">
Og placeres imellem head tags i html koden. Det den gør er at den opdaterer siden med urlen efter 3 sekunder.
Javascript redirect
Ligesom Meta omdirigering, kan javascript omdirigering også bruges til samme formål. Der er faktisk lige så mange formål og muligheder. Og det er reelt kun fantasien der sætter grænser. Forskellen er reelt bare at omdirigeringen laves med javascript. Det betyder også at google og andre søgemaskiner samt browseren, heller ikke registrere dette som en reel omdirigering.
her er et eksempel på en javascript omdirigering, hvor der først vises en besked, for derefter at omdirigere brugeren til en ny side efter 3 sekunder:
<div id="besked"></div>
<a href="#" onclick="omdirigering()">Omdiriger ved klik</a>
<script>
function omdirigering () {
setTimeout(nyURL, 3000);
var besked = document.getElementById("besked");
besked.innerHTML = "Siden omdirigerer om 5 sekunder, tak for besøget";
}
function nyURL() {
document.location.href = 'https://kim-tetzlaff.dk';
}
</script>
Valg af metode til omdirigering af hjemmesider
Her tænker jeg ikke så meget på om det er 301 eller 301 redirect du skal lave, men mere om du skal gøre det via, htaccess, vHost, PHP eller WordPress
Ja hvilken en skal du vælge når vi snakker om redirects? Jeg har skrevet om det mange gange. Men hurtigt fortalt kommer det an på hvordan man ser på det og hvilke muligheder du selv har eller din hjemmeside har. Ud over det har de hver især sin indflydelse på hjemmesidens performance og hastighed, hvor htaccess metoden rent faktisk har den største indflydelse.
Så hvad skal man vælge? Man skal selvfølgelig vælge det man har det bedst med, men jeg personligt ville til hver en tid vælge at bruge vHost eller PHP. Det kommer an på hvad det er jeg vil opnå. Htaccess vil altid være min sidste udvej.
Hvordan redirecter man så?
Reelt er det meget nemt, men der er alligevel nogle ting man skal tage højde for, og dette indebære blandt andet at benytte sig af de rette måder at omdirigere på. Du har allerede læst hvad en omdirigering er, så er det tid til at du finder ud af hvilke typer der findes til brug i vHost og htaccess.
redirect 301
Redirect bruges når man har enkeltstående sider man gerne vil have omdirigeret til en anden specifik url eller web-adresse. Det er denne du som udgangspunkt skal bruge da den på server niveau ikke har den store indflydelse på performance, og den er også utrolig nem at bruge i de fleste tilfælde.
Den ser ud sådan via htaccess:
Redirect 301 /gammel/fil.html https://kim-tetzlaff.dk/ny/fil.html
RedirectMatch via htaccess
RedirectMatch fungerer og har samme performance som sin lillebror Redirect, forskellen her er bare at man kan benytte sig af Regular Expressions (regex), hvilket gør at man kan lave langt mere avancerede filtreringer af de url’s der skal omdirigeres. Det kan måske være at du har 20 sider du gerne vil omdirigerer, alle ligger i samme mappestruktur på hjemmesiden, men du gider egentlig ikke skulle til at skrive 20 linjer kode, for at opnå det samme du kan med 1 linje.
Yderligere kan man overordnet sige, at hvis du i en rewrite kun bruger RewriteRule i en redirect, så kan du lige så godt bruge RedirectMatch i stedet for, det er langt hurtigere og belaster betydeligt mindre.
RedirectMatch ser ud sådan:
RedirectMatch 301 (.*)$ https://kim-tetzlaff.dk$1
Rewrite via htccess
Rewrites er et stort modul og kræver derfor også meget af serveren der skal fortolke dem. Lad mig allerede nu sige det, så vidt det er muligt, undgå rewrites – Der findes altid bedre løsninger.
Men med rewrites kan du se på rigtig mange parametre, lave regex, tjekke domæne, referer, filer, mapper og meget meget mere. Det er også derfor at det i mange tilfælde ikke skal være vejen man går når man vil lave en simpel omdirigering, da modulet ganske simpelt er alt for stort til så små opgaver.
Et godt eksempel på at det har en stor indflydelse, kan du læse om her, men hurtigt fortalt har en lille kode som den WordPress indsætter for sine permalinks (brugervenlige url adresser), en så stor indflydelse at performance bliver 15% dårligere. Så man skal altid prøve at undgå brugen af rewrites hvis det er muligt. Men bruger du det skal du huske altid at aktivere mod_rewrite, hvilket du gør ved at skrive linjen “RewriteEngine On” før dine RewriteRules og RewriteCond.
Rewrites ser ud sådan: (denne er taget fra WordPress)
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Som du nok kan se, er der stor forskel på hvad man skal gøre og hvilken indflydelse det har på ens site, men ved man det, ved man også hvor man skal starte, og hvorfor.
Regular expressions (Regulære udtryk)
Et regulært udtryk, er et yderst avanceret matchingsprog, der bruges til at sammenligne og finde tekststrenge. Man kan på et lavt niveau sammenligne det med tekstprogrammer som word, hvor du fx kan lave en søg og erstat på ord og sætninger. Lærer man at beherske dette sprog, så er der næsten ingen begrænsninger for hvilke mønstre du kan sammensætte for at finde lige netop det du skal i din Rewrite eller RedirectMatch.
Så hvis du gerne vil lave dine redirects selv, hvilket jeg formoder når du læser dette indlæg, så vil det være en god ide at sætte sig ind i regex, som minimum hvad de forskellige tegn gør og ikke gør.
På de andre faner, kan du se nogle eksempler på tegn og hvordan man kan bruge dem.
RegEx beskrivelse og eksempler
Tegn | Beskrivelse og eksempler |
---|---|
. | Punktum Matcher et enkelt tegn k.m matcher kim, kam, kom, kpm, kum etc. |
+ | Gentager det forrige match en eller flere gange k+ matcher k, kk, kkk etc. |
* | Gentager de tidligere match nul eller flere gange. k* matcher det samme som k+ matches, men også hvis strengen er tom |
? | Gør matchen valgfri. farver? matcher både farve og farver |
^ | Kaldes et anker, og matcher begyndelsen af strengen ^kim matcher en streng der begynder med kim |
$ | Også et anker, fortæller at det er slutningen af strengen. kim$ matcher en streng der ender på kim. |
( ) | Grupper flere tegn i en enkelt enhed, og gemmer match til brug i en reference. (kim)+ matcher kimkim – fordi + her bruges på gruppen. |
[ ] | En tegn klasse – matcher et af de tegn der står i k[ioa]m matche kim, kam eller kom. |
[^ ] | Negativ tegn klasse – matcher ethvert tegn, der ikke er skrevet k[^i]m matcher kom eller kam men ikke kim |
{} | Match et antal af forgående a{3} matcher aaa. eksakt 3 a{,3} matcher a, aa, aaa. op til 3 a{3,} matcher aaa,aaaa,aaaaa etc. fra 3 og op a{3,6} matcher aaa, aaaa, aaaaa, aaaaaa. fra 3 til og med 6 gange |
\s | Matcher et white space (mellemrum) Kim\sTetzlaff matcher Kim Tetzlaff. |
RegEx kombinationer
Jeg vil her vise nogle eksempler på hvordan man kan bruge regex i forskellige situationer, for at finde frem til bestemte ting i sine strenge. når vi har med omdirigeringer at gøre vil strengen du leder i typisk være url, men det kan også være domæne, referer, fil og meget andet.
Tegn | Beskrivelse og eksempler |
---|---|
([0-9]+) | Skal matche og gemme, hvis der er et eller flere tal |
([a-z]+) | Skal matche og gemme, hvis der er et eller flere små bogstaver |
([a-zA-Z]+) | Skal matche og gemme, hvis der er et eller flere små og store bogstaver |
htaccess redirect eller vHost redirect?
Herunder finder du en del situationer hvor man benytter sig af omdirigeringer. og jeg prøver at komme ind på den bedste og hurtigste metode, især set i forhold til belastning af serveren og dens performance.
Redirect 301 – Klassisk htaccess redirect
En klassisk omdirigering er den omdirigering hvor man har en url og en destination. Det betyder at man rent faktisk bare ser på om en given gammel url bliver kaldt, gør den det, så omdirigerer man over til den nye url.
Den ser ud sådan:
Redirect 301 /gammel/fil.html https://kim-tetzlaff.dk/ny/fil.html
Ovenstående metode er ret nem, men omfattende når man har mange sider man gerne vil redirecte, men omvendt skal man også tænke på at den er utrolig hurtig afviklet på serveren og belaster nærmest ikke performance. Så den er absolut god at have ved hånden.
Dens storebror “RedirectMatch” er lige så god og hurtig, forskellen er bare at du her kan benytte dig af regex (regular expressions). Ved du ikke hvad det er, er det at du fx kan sige alle urls som indeholder navnet (Kim), skal omdirigeres til en given side. altså kan man lave langt mere avancerede redirects som skære flere urls over en kamp.
Det kunne se ud sådan:
RedirectMatch 301 ^/gammel/(.*)$ https://kim-tetzlaff.dk/ny/$1
Men husk at passe på, da du kan tage mere med end du lige ville når du bruger regex, og samtidig skal du kende systemet som ligger bag, da der findes mange måder at bruge det på som jeg også vil komme ind på i nogle af de andre punkter.
Redirect wordpress – SEO wise
WordPress er et af de mest SEO venlige open source systemer på markedet, men det har alligevel sine huller, som man lige så godt kan gøre noget ved. Fx har wordpress endnu ikke gjort noget ved manglende skråstreg for enden af webadresser. Så kan det godt være du tænker, jamen der er jo canonical tag på som netop sørger for at vise søgemaskiner at der skal være en skråstreg. Men problemet er bare at canonical tag kun er et plaster på såret. Man bør derfor sørge for både i forhold til indeksering, men også linkværdi, at der bliver omdirigeret til urlen med skråstreg som er den standard wordpress har. Det gør man sådan:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^(.*)\.(.*)
RewriteCond %{QUERY_STRING} =""
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ http://%{HTTP_HOST}/$1/ [L,R=301]
Redirect kun forside
Kun at omdirigere forsiden, kan give nogle problemer som vi lige så godt kan nævne her. Det man skal være opmærksom på er om man laver brugervenlige urladresser eller ikke, da fx WordPress permalink metoden, laver en rewrite, som man lige skal tage hensyn til:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Men ved man at man lige skal tage hensyn til det, ja ved man også hvilken metode man skal bruge til formålet.
RewriteEngine On
RewriteRule ^$ https://kim-tetzlaff.dk/ [L,R=301]
^ Betyder starter med – hvilket i dette tilfælde vil sige, starter med ingenting.
$ Betyder at strengen afsluttes
Redirect alle sider undtagen nogle få
Der er flere måder at løse denne på, og det kommer i grunden an på situationen. og jeg vil her vise nogle eksempler på hvordan du kan løse forskellige situationer.
Der er jo den klassiske metode, hvor man udvælger dem der skal redirectes og hvor de skal redirectes til. Så vil det nemlig kun være dem du har skrevet der bliver redirected.
Redirect 301 /gammel/fil1.html https://kim-tetzlaff.dk/ny/fil1.html
Redirect 301 /gammel/fil2.html https://kim-tetzlaff.dk/ny/fil2.html
...
Men har du fx en mappe du gerne vil redirecte over til en side, eller måske til samme urls bare i en anden mappe, så skal du benytte dig af RedirectMatch.
RedirectMatch Eksempler: Ovenstående kunne blive løst med en RedirectMatch, selvom det er noget usandsynligt at scenariet vil se ud sådan i virkeligheden. Du vil stadig få en ide om hvordan du kan bruge RedirectMatch.
RedirectMatch 301 ^/gammel/(.*)?$ https://kim-tetzlaff.dk/mappe/$1
^/mappe/(.*)$ Betyder hvis urlen starter med “/gammel/” og der muligvis kan være 0 eller flere tegn efter, så skal den redirectes.
Redirect Fra et domæne til et andet
Det at redirecte fra et domæne til et andet, er meget nemt, så længe man forstår situationen man er i lige nu. der er nemlig flere måder at løse det på.
Har du fx flere webhoteller, hvor du gerne vil redirecte de domæner der er tilknyttet de forskellige webhoteller, kan du bruge RedirectMatch til at omdirigere fra det ene domæne til det andet. Det er dog vigtigt at htaccess filen er placeret på det webhotel hvorfra du vil omdirigere, da den tager ALT og omdirigere til det nye domæne:
RedirectMatch 301 (.*)$ https://kim-tetzlaff.dk$1
(.*)$ Find og gem hele urlen der bliver efterspurgt
$1 udskriv den gemte url
Du kan også bruge:
Redirect 301 / https://kim-tetzlaff.dk/
Peger domænet derimod på samme webhotel som der hvor du vil redirecte over til, skal du bruge en anden metode, da ovenstående, nemlig også vil have indflydelse på det domæne du prøver at redirecte til, og vil derfor lave det man kalder et redirect loop som aldrig bliver færdigt. Her skal du i stedet se på en rewrite til formålet.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^gammelt-domæne.dk$ [NC]
RewriteRule ^(.*)$ https://kim-tetzlaff.dk/$1 [L,R=301]
Det vi gør her er at bruge det der hedder en RewriteCond, som sådan set er en form for regel, der skal være opfyldt, før RewriteRule slår igennem. og i dette tilfælde spørger jeg om hostnavnet (domænenavnet) starter med (^) gammelt-domæne.dk, og gør domænet det, ja så vil den omdirigere til kim-tetzlaff.dk
Men hvad så med forespørgelser på domænet med www, eller andre subdomæner?
jo hvis du ændre lidt i RewriteCond, sådan at den også ser på om domænet har en sub (xxx.gamelt-domæne.dk), så skulle der være taget hånd om den del også.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.)gammelt-domæne.dk$ [NC]
RewriteRule ^(.)$ https://kim-tetzlaff.dk/$1 [L,R=301]
Redirect fra et domæne til en andens forside
Tager vi eksemplet fra før og bruger her, vil det komme til at se ud som nedenfor.
Rewrite:
Bruges i tilfælde af at domænet peger på hoveddomænets webhotel.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.*)gammelt-domæne\.dk$ [NC]
RewriteRule ^(.*)$ https://kim-tetzlaff.dk/? [L,R=301]
RedirectMatch:
Bruges hvis domænet ligger på et andet webhotel end hoveddomænet.
RedirectMatch 301 (.*)$ https://kim-tetzlaff.dk/
Redirect 301 til hoveddomænet fra andre domæner
I rigtig mange tilfælde, kan man have mere end et domæne der peger på et webhotel, og så er det smartere og bedre for performance, at man prøver at tilgodese alle domænerne med så lidt kode som muligt. som du jo kunne læse tidligere i indlægget, så har rewrites nemlig stor betydning for en hjemmesides performance.
RewriteEngine On
RewriteCond %{HTTP_HOST} !^kim-tetzlaff\.dk$ [NC]
RewriteRule ^(.*)$ https://kim-tetzlaff.dk/ [L,R=301]
Det vi gør her er at sige, hvis ikke (!) domænet starter med (^) kim-tetzlaff.dk, så skal vi redirecte til kim-tetzlaff.dk.
Redirect en mappe til en anden mappe
Omdiriger alle sider som ligger i en mappe, til et andet domæne, med samme urlstruktur
RedirectMatch 301 ^/mappe/(.*)$ https://kim-tetzlaff.dk/mappe/$1
^/mappe/(.*)$ Betyder hvis urlen starter med “/mappe/” og der muligvis kan være 0 eller flere tegn efter, så skal den redirectes.
Skift filendelse med redirect
At skifte filendelsen (file extention), er utrolig nemt. det eneste du skal sørge for er at få fat i urlen uden endelse, og selvfølgelig gemme den så du efterfølgende kan udskrive den, og tilføje den fil endelse du gerne vil have i stedet for.
RewriteEngine On
RewriteRule ^(.*)(\.php)$ https://kim-tetzlaff.dk$1.html [L,R=301]
Redirect flere mapper på en gang
Hvis du gerne vil redirecte flere mapper, kan du enten bruge den forgående metode hvor du redirecter en mappe til en anden, eller du kan bruge denne metode hvor du får fat i alle de mapper du vil, i en omskrivning.
RedirectMatch 301 (mappe1|mappe2|etc)/(.*)\.(.*)$ https://kim-tetzlaff.dk/ny/$2.$3
eller hvis du gerne vil redirecte til samme mappestruktur op et andet domæne, kan du også gøre det:
RedirectMatch 301 (mappe1|mappe2|etc)/(.*)$ https://kim-tetzlaff.dk/$1/$2
Redirect en mappe med specifikke tegn
nogen gange kan det være nødvendigt at lave et match kun på bogstaver, tal eller noget andet, hvis fx man er sikker på at mapperne eller filerne man vil redirecte kun indeholder det, og man ikke vil redirecte filer eller mapper som indeholder andre tegn og tal. Det regex man skal bruge ser ud sådan: [a-z], men den tager kun hensyn til små bogstaver, vil man have både store og små bogstaver skal man skrive [a-zA-Z].
Mapper skifter til ny mappe:
RedirectMatch 301 ^/[a-zA-Z]+/(.*)\.html$ https://kim-tetzlaff.dk/ny/$1.html
Fra bogstavfil til mappe:
RedirectMatch 301 /([a-zA-Z]+)\.html$ https://kim-tetzlaff.dk/$1/
Redirect kun tal
RedirectMatch 301 ^/[0-9]+/(.*)\.html$ https://kim-tetzlaff.dk/ny/$1.html
Tal, bogstaver og måske en bindestreg
Den ligner de ovenstående regex, den store forskel er at jeg har skrevet en bindestreg og et spørgsmålstegn bagefter, hvilket betyder at bindestregen kan måske være der.
RedirectMatch 301 ^/[0-9a-zA-z-?]+/(.*)\.html$ https://kim-tetzlaff.dk/ny/$1.html
Fjern Query fra url
Det er tit sådan at man gerne vil fjerne query fra urlen, da denne kan skabe dobbelt indhold. Det er forholdvist nemt.
RewriteEngine On
RewriteCond %{QUERY_STRING} !=""
RewriteRule ^(.*)$ /$1? [R=301,L]
Der hvor det kan gå galt er hvis der er noget på hjemmesiden, der rent faktisk skal bruge en query til noget, dette kan fx være administrationen på et site, reklamer, affiliate links mm. Her skal man så ind og tage hensyn til det, og fortælle at den rent faktisk ikke skal fjerne den, hvis en query er sat.
RewriteEngine On
RewriteCond %{QUERY_STRING} !=""
RewriteCond %{QUERY_STRING} !^query=.*
RewriteRule ^(.*)$ /$1? [R=301,L]
Man kan også gør det sådan at hvis der er tale om bestemte mapper, skal den heller ikke fjernes
RewriteEngine On
RewriteCond %{QUERY_STRING} !=""
RewriteCond %{REQUEST_URI} !^/administration.*
RewriteRule ^(.*)$ /$1? [R=301,L]
Redirect query til brugervenlig url
Men kommer tit ud for at man lige skifter sin gamle metode ud med en ny, dette skete især for nogle år siden hvor man stadig brugte querys i urlen for at bygge hjemmesiden på dynamisk vis. Men i dag laver man jo dynamiske sider ved at benytte sig af brugervenlige urladresser, og PHP eller serversidekoden, tager sig så af at behandle og finde den rette side.
Men de gamle sider skal jo omdirigeres.
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/index\.php$
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^(.*)$ https://kim-tetzlaff.dk/page/%1.php? [L,R=301]
Redirect hvis query indeholder specifik tekst
RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^(.*)$ https://kim-tetzlaff.dk/? [L,R=301]
Fjern skråstreg fra url (trailing slash)
Det kan nogen gange være nødvendigt at fjerne den sidste skråstreg i en url, fordi det tit er sådan at hjemmesider viser det samme indhold på urlen med og uden slash i enden, hvilket skaber dobbelt indhold.
RewriteEngine On
RewriteCond %{REQUEST_URI} (.*)/$
RewriteRule ^(.*)/$ https://kim-tetzlaff.dk/$1 [L,R=301]
Det samme gælder tilføjelse af skråstreg i enden.
RewriteEngine On
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ https://kim-tetzlaff.dk/$1/ [L,R=301]
Det ses forholdsvis tit at der generere urls med flere skråstreger efter hinanden, hvilket også her skaber dobbelt indhold. Så det bedste er at redirecte. Både for at brugeren hvis der linkes, linker til det rette indhold og med rette url. Men også for at linkjuice ryger det rette sted hen.
RewriteEngine On
RewriteRule ^(([^/]+/)*)/+(.*)$ https://kim-tetzlaff.dk}/$1$3 [R=301,L]
Http https redirect (Altid SSL)
Omdirigering af alle urls når du skifter fra HTTP til HTTPS er utrolig vigtigt, du mister mange placeringer hvis du glemmer det og dermed mange besøgende.
Dette eksempel kan bruges i din htaccess fil:
RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
404 redirect htaccess
404 not found, er reelt en header der sættes når en side på ens hjemmeside ikke kan blive fundet. Det fortæller blandt andet google at den side skal de ikke indeksere. Har du i stedet slettet en side med vilje, bør man faktisk bruge den der hedder 410 Gone, som reelt betyder at den er slettet permanent.
I mange tilfælde ville man dog lave en 301 omdirigering til en ny side, da den gamle ofte havde noget værdi man gerne vil bibeholde på siden.
Men vil du gerne lave en redirect til enten 404 eller 410, kan du gøre følgende:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/search/.* [OR] #Alle sider under mappen Search
RewriteCond %{QUERY_STRING} ^s=.* # eller alle querys hvor s er sat
RewriteRule .* - [R=410,L]
Flere er undervejs
Jeg vil udvide denne liste konstant, så kom endelig tilbage hvis du gerne vil følge med og lære noget om omdirigeringer.
Fejl du kan opleve ved at arbejde med redirect
denne webside har et loop ved omdirigering
Det betyder at der er en omdirigering på din hjemmeside som først omdirigere til en url, og den url omdirigere så tilbage til den anden url. Omvendt kan det også være at du har en omdirigering som omdirigere til sig selv.
Spørg endelig
Har du en redirect du ikke lige ved hvordan du skal lave, eller sagt på en anden måde. Har du en situation du ikke helt ved hvordan du skal redirecte, så tøv ikke, skriv en kommentar, eller en mail, så skal jeg gøre alt for at besvare.
Super indlæg Kim! Den bliver delt diverse steder!
Cool 😉 og takker
Super flot indlæg Kim. Har netop fået en henvendelse fra en ny kunde, hvor det var gjort forkert.
/Susanne
Ja det sker tit, at det bliver lavet forkert. men så er det jo godt at der er steder hvor man kan lære sådan noget 🙂 fx her…
Hej Kim
Et super gennemarbejdet indlæg, den er bookmarket med de andre guldkorn
Den er hermed gemt som bookmark :o)
Super brugbart indlæg Kim. Jeg siger mange tak. 🙂
Fedt indlæg Kim, og tillykke med dit nye design, det er også ret lækkert 🙂
Nye design 🙂 dette er min nye personlige hjemmeside. den anden ktj-media.dk får selvfølgelig også et designløft, men har lige en del opgaver jeg skal have færdige i år 🙂
Hej Kim
Flot lavet guide jeg har set en del guider omkring 301 før men her
har du virkelig fået det hele med
godt gået
Har også prøvet at få det meste med, i hvert fald det som rigtig mange har spurgt mig om gennem tiden. Men men, den vil blive udbygget med tiden, så den bliver endnu større og vil have endnu flere tips.
Rigtig god guide, Kim.
Tak ffor et godt opslagsværk, som bør ligge i enhver PHP/Wordpress/Joomla webmasters foretrukne. 🙂
Super guide – thanks for sharing (0;
Og det ser sgu’ lækkert ud med de “harmonikaer”. Er det en WordPress ting?
Det var så lidt – Nej de harmonikaer er ikke en decideret WordPress ting, det var godt nok indbygget i det tema jeg har taget udgangspunkt i, men jQuery UI giver dig muligheden, og der findes et hav af forskellige scripts du kan bruge.
Stærkt indlæg. Har lige leveret et større stykke redirect arbejde, og kunne godt ha’ brugt dit indlæg for en uge siden! Noget mere struktureret og let tilgængeligt end meget andet jeg har set. 🙂
🙂 er det ikke altid sådan at man godt lige kunne have brugt det noget før 🙂
Rigtig godt indlæg, Kim. der var flere ting som jeg ikke lige havde undersøgt godt nok tidligere, så dejligt at få det på banen igen.
Hej Kim,
Woooo Wow… Lige hvad jeg manglede.. Jeg kæmper fra tid til anden med htaccess
Dette hjalp… Jeg fik rettet lidt hist og pist!! Så det triller bedre…
Keep it up.. Jeg skal nok lige skyde / skrive hvis der er noget, der mangler… næppe! 🙂
God Jul
Peter
Hej Kim
Hvis man har et bibliotek med nogle under biblioteker man gerne vil have alle til at gå til forsiden til ens hjemmeside, hvordan ser koden så ud??
Eks.
foto
mormor
morfar
farmor
farfar
O.s.v
Google har indexeret mine sider så de ligger ude på Google og hvis der eks. dukker et links op på. eks. foto/mormor/image77.jpg, så skal der være således at dette links redirecter til min forside – da bibliotekerne jo er blevet slette.
Jeg kan sagtens redirecte selve hovedmappen FOTO til min forside, men ikke alle de andre biblioteker.
Tak for dit svar
Anders Pedersen
Hej Anders,
Den er faktisk ligetil hvis man tager et kig oppe i listen, vil man kunne hente inspiration til hvordan det skal gøres, men du kan også se hvordan her:
RedirectMatch 301 foto/?(.*)$ http://www. domænet .dk/
Domænet uden mellemrum selvfølgelig 🙂 linket skulle bare ikke være der
Super guide, som jeg netop har fundet via e-universe og meget relevant, da jeg skal til at flytte en webshop og redirecte den til et nyt domæne
Tak for det
Mvh
Henrik
Fed guide Kim, elsker de her opslags-referencer 🙂
Har dog en udfordring omkring din trailing slash til/fra opsætning.
Jeg får den problematik, at css filer f.eks., med en eller anden query-variabel efterføgende, bliver omdannet til f.eks.
http://www.domæne.dk/wp-content/themes/inovado/framework/css/basic.css/?ver=1
Den oprindelige er
http://www.domæne.dk/wp-content/themes/inovado/framework/css/basic.css?ver=1
Så den indsætter et / efter basic.css hvilket laver ged i den. og jeg kunne forestille mig det gælder alle url’er med query-vars i. Kan man skrive RewriteCond således, at den ikke gør det ved url’er med query-vars?
/Martin
Hej.
Jeg kæmper helt vildt med alt det her Redirect, jeg håber du måske kan hjælpe.
Jeg har fået utallige forskellige koder fra folk som jeg har prøvet, men kan ikke få det til at virke.
Jeg har 4 helt nye domæner, det er kun det ene domæne som joomla er installeret på og hvor jeg har opbygget min hjemmeside. De andre 3 domæner er tomme (med bindestreg, uden æ,ø,å osv)
Jeg har oprettet en tom index.php i FTP på de 3 tomme domæner, her har jeg som det sidste, prøvet at skrive din kode ind:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^elastik-snoerebaand\.dk$ [NC]
RewriteRule ^(.*)$ http://elastiksnørebånd.dk/ [L,R=301]
Altså elastiksnørebånd er mit hoveddomæne.
Når jeg nu taster elastik-snoerebaand.dk ind i browser, så viser den faktisk bare en hvid side med denne kode.
Hvad gør jeg forkert? Og Hvad kan/skal jeg gøre?
Vil gerne have alle de 3 domæner omdirigeret til den 4 og gerne samtidig også Non www til www.
Hoveddomænet har fået lagt Non www til www ind.
På forhånd tak!
Mvh. Camilla
Kan se du vidst har fået det til at virke. Men det man skal gøre er at man skriver det i en .htaccess fil.
Men vil du gerne have det skal gå endnu hurtigere, så skal du i stedet bruge “RedirectMatch 301 (.*)$ http://elastiksnørebånd.dk$1” da den ikke har indflydelse på hastigheden. og er nemmere at have med at gøre. den redirecter også alle kald til den side.
Hej Kim
Tak for en brugbar og interessant artikel. Den var givende. Jeg har et spørgsmål, som jeg håber du har lyst til at svare på. Jeg har lavet en redirect(plugin) på en wordpress side og det fungere endelig som den skal ift. indhold. Den ændre url så der på forsiden vises en kalender, men det giver mig en del problemer med deling af siden på fx. Facebook. ligeledes virker visuel editor i backend på WordPress. Jeg vil gerne lave den i .htaccess og tænkte om du havde et par fif? PÅ forhånd tak og igen, tak for en interessant artikel. mvh H
Første spørgsmål til dig må være, hvorfor ændre du urlen for at du kan vise en kalender på forsiden? formoder der er tale om stengade.dk? i så fald ville min løsning være at du rent faktisk laver program siden til at være forsiden. Det kan du gøre under indstillinger -> læsning… eller alternativt bygger en forside ud fra en templatefil til formålet. Der er efter min mening ingen grund til at omdirigere brugeren til en underside, for at vise denne kalender på forsiden.
Hejsa 🙂
Det WordPress plugin du nævner, laver det redirect som PHP script?
For hvis jeg forstår dig korrekt, så er PHP det mest optimale at bruge, når vi taler performance på en website!?
Ja det laver det via php, men den gør dog også det at den søger i databasen, gemmer data og historik mm. Hvilket betyder at det er ikke det samme som det jeg mener når jeg siger via php. Når jeg siger php så mener jeg kun php. Men jo det er bedre for performance med det plugin i stedet for htaccess. Man skal bare lige huske at rydde ud i loggen da den ellers på nogen sites kan blive stor og gøre så sitet køre langsommere. Og så skal du ikke glemme at det jo er et plugin hvilket jo også har indflydelse på performance.
Alternativt kan man via en templatefil til ikke fundne sider lave alle sine regler og omdirigeringer. Hvilket er bedre end at bruge pluginet.
Hej Kim
Kan man lave en redirect fra mitdomæne.dk til mitnyedomæne.dk og beholde url mitdomæne.dk/ og hvad man nu kalder på mitnyedomæne.dk
FX kalder man mitnyedomæne.dk/kontakt så siger urlen mitdomæne,dk/kontakt
Hej Kim,
Lige det du skriver kan man ikke. En redirect fra mitdomæne.dk til mitnyedomæne.dk, vil jo omdirigere brugeren til mitnyedomæne.dk og sørge for at brugeren forbliver på det domæne.
“FX kalder man mitnyedomæne.dk/kontakt så siger urlen mitdomæne,dk/kontakt” Dette er jo så den anden vej, set i forhold til det du først skriver. der omdirigere man jo mitnyedomæne.dk til mitdomæne.dk.
Det er svært at se hvad det er du reelt vil, men hvis du gerne vil skifte din hjemmeside over til et nyt domæne, skal du pege dit nye domæne over på den samme server/webhotel (hvis det er muligt). Og derefter skal du på samme webhotel, lave en redirect fra det gamle til det nye domæne. Du må lige uddybe, hvis ikke det var det du mente 🙂
Hej
Min datter er blevet forhandler og har fået sin egen webshop hos et firma, firmanavn.dk/123456789sshsfh/ det er sært at huske og meget for kunderne at taste der har vi købt er nyt domæne, håbede at man så kunne lave det således at når man skrev det nye domæne kunne man få vist indholdet af firmanavn.dk/123456789sshsfh/ på det nye domæne.
Jeg har lavet en iframe lige nu men det retter ikke url’en når man klikker rundt på siden, hvis du forstår?
Hvad er det for et firma? Er det en hostet shopløsning, burde du kunne spørge det firma om netop det. Hoster i selv løsningen (på et webhotel) hvor i har adgang til ALLE filer inkl shoppen. Så kan man gøre stort set hvad man vil.
Det lyder dog meget som om det er en hostet shopløsning, hvor man ikke selv kan gøre så meget. Hvilken shop er der tale om?
Det er så det man kalder en hostet shopløsning. der skal i kontakte dem hun har et samarbejde med. For at høre om det er muligt at benytte sit eget domænenavn frem for den anden url/webadresse. Der er ikke ret meget man kan gøre da det er en hostet webshop/forhandler webshop.
Dertil vil de sikkert, hvis det er muligt, komme med instruktioner til hvad i skal sætte op i DNS for at det kan lade sig gøre.
Tak for hjælpen
Hej
Tak for guiden, som virker nogenlunde forståelig – er ikke programmør 🙂
Har nogle sider
/manufactures
/sitemap
/price-drop
som er indexerede, men som ikke har indhold og som jeg gerne vil have væk fra index 🙂
Hvad er her bedste mulighed?
– 301 til forsiden
– 410 (ved ikke helt hvad den dækker over men har set den beskrevet som den kode der fjerner siden)
Hvordan undgår jeg, at siderne dukker op igen?
På forhånd tak.
Mvh Henrik
Jeg bruger typisk 301 så eventuel seo værdi kommer over til fx forsiden.
Alternativt skal du sætte noindex robots metatagget på siderne.
Hej Kim
Virkelig god guide som jeg vil bruge som opslagsliste, samt henvise til.
Jeg har lavet et lille indlæg angående redirects for URLS med ÆØÅ
Takker søren, kunne være at jeg skulle bygge det ind i guiden også, sådan at æøå og andre specialtegn som fx mellemrum etc. Også kommer med i guiden. Sådan så der er reelle eksempler på hvordan det bruges og gøres. Har skrevet det mange gange i fora forskellige steder på nettet. Men for en god ordens skyld kommer den også med her 🙂
Ja, helt sikkert du skal få det med…. det er den sidste detalje til den mest komplette redirect guide på dansk:D
Tak for en god guide Kim
Jeg kan se, at jeg har en grum uvane som (muligvis) påvirker min hastighed; nemlig at skrive min 301’ere direkte ind i htaccess filen.
Specielt for nogle ældre sites hvor at URL’er er ændret over tid, har jeg mange hundrede redirects. Jeg kan forstå her, at htaccess så ikke er den rette model.
Men hvad er så?
Yoast SEO Pro kommer med et redirect plugin – er det en god løsning til så mange redirects?
Eller er der andre plugins/metoder som er smartere med WordPress?
Tænker at jeg belaster sitet mindst, ved at smide det ind som PHP i min 404 fil?
Hej Nicolai,
Både og, det kommer lidt an på hvordan dine nuværende redirects ser ud. Benytter du de små redirects som fx “Redirect 301” eller “RedirectMatch 301” så vil det kun have meget lidt indflydelse på performance også selvom der er 1000 redirects. Men bruger du Rewrites til noget af det, så skal du til at finde andre muligheder som fx PHP, vHost, Redirect 301 eller redirectMatch 301.
Skal du gøre det via PHP, skal du helst ikke benytte dig af plugins til netop det, da de har det med at skulle gå gennem database, wordpress og meget andet. Altså er det samtidig også krævende for serveren. Især fordi 404 sider typisk ikke bliver cached, så vil det være serverens rå energi der bliver brugt i større format.
Men ja, for at du belaster performance mindst muligt, skal du finde en metode som:
– kun læses en gang (vHost)
– benytter serverens mindre moduler (htaccess og redirect 301 eller redirectmatch 301)
– eller kun læses når der skal redirectes (redirects via PHP) så længe man er obs på at det fx i wordpress, alligevel godt kan belaste mere end det skal.
Det du skal undgå er:
– Rewrites i htaccess er nogo når vi snakker performance
– Database læsninger/søgninger
– Plugins
Hej Kim.
Tak for en utrolig brugbar og lærerig guide – det er helt sikkert ikke sidste gang jeg gennemlæser den!
Mit spørgsmål går på, at jeg står og har et website, hvor alt er skiftet til HTTPS. Problemet er at alle gamle links der er benyttet på sociale medier, nyhedsbreve mm. stadig er HTTP. Hvordan laver jeg lettest en redirection på dette?
På forhånd mange tak for hjælpen.
Vh. Cecilia
Gå ned under fra HTTP til HTTPS, der ser du hvordan du lettest laver denne redirect.
Hej Kim
Har gennemlæst dit indlæg om redirects, hvilket jeg også tidligere har gjort, med en gemt reference til at her skulle jeg kunne finde det meste jeg behøvede, forklaret på Dansk.
Jeg sidder og roder med at en varekatagori skal ændres fra /produkt/ til /shop/ men skal bibeholde efterfølgende adresse.
Eksempel:
ændres til:
Med en 301 permanent redirect, men ønsker at ramme alle produkter i undermappen /produkt/ uden at lave dem enkeltvis????
Hej Peter
Du burde kunne bruge den redirect som står her:
https://kim-tetzlaff.dk/redirect-guiden-php-vhost-htaccess.html#redirect-fra-mappe-til-mappe
Hej Kim
Tusinde tak for din fine guide. Vi slås dog stadig med et problem.
Ikke alle redirects på vores hjemmeside fungere på alle devices. Vi bruger Yoast SEO Premium til at lave dem i. Vi har lige lavet om hele hjemmesidens map og har derfor en del redirects. De fungerer fint på min mac, men på min iphone virker nogle af dem ikke. Det gør de heller ikke på min makker almindelige pc.
Hvad skal vi gøre ved det? Det er jo ret irriterende at folk ikke kommer hen på den rigtige side…
Vi har bla. et redirect på til
som virker fint hos mig men ikke hos makkeren.
Hvis vi skal sætte de nye redirect op i en PHP – hvilken skal vi så bruge? Der ligger mega mange PHP i vores Theme DIVI til wp.
Der kan være mange grunde til at det ikke virker på en given computer eller enhed. Typisk er det dog at det er fordi enheden gemmer på en cachet udgave, og derfor slet ikke besøger hjemmesiden. Skal du teste om en redirect virker, kan du gøre det via denne redirect tester eller via en af de mange headers testers som du kan finde på google. Redirecter den der, gør den det også for de fleste andre.
Når det så er sagt, så skal du nok lige tage et kig på det at hjemmesiden ikke sender en udløbsdato med i dens headere. Det skal du lige indstille på siden. Benyt evt WP Rocket, så får du også en hurtigere hjemmeside samtidig. Den sætter de rette headere og udløbsdatoer for de forskellige kald der sker til din hjemmeside. billeder, css, js, html etc.
Hej Kim.
Gl tråd, men evig aktuel når man starter en ny hjemmeside.
Der er flere muligheder for at lave en redirect kan jeg konkludere at såfremt man har en wordpress hjemmeside så er en af de mange wordpress redirect plugin fuldt lige så godt som at anvende en af de andre løsninger du skitsere.
På forhånd tak
Ole
Ja Mange wordpress plugins kan i dag også skrive i fx htaccess, men der hvor det store problem er, er ved at de der benytter de plugins ikke aner hvad det reelt gør, og mange plugins skal lige opsættes før de rent faktisk gør det på den bedste måde. Men det er jo også svært at vide som bruger af dem, hvis ikke man selv ved hvad der er den bedste måde at lave en redirect på. Men som standard er det ofte sådan, at der laves redirect via wordpress, hvilket er krævende for serveren set i forhold til hvis den redirect laves i htaccess. Hvilket uden tøven nedsætter performance på serveren.
Hej Kim
Vi har netop lavet en ny side med en ny host og skal derfor have lavet en 301 redirect af vores gamle domæne. Er det rigtigt forstået, at vi skal opsætte .htaccess på det gamle domæne? Eller skal det sættes op på det nye?
Mvh Michael
Jeg personligt ville lade det gamle domæne pege over på den nye side, sådan at de kalder samme hjemmeside/server og på den nye hjemmeside/server lave redirect fra det gamle til det nye domæne