Er din hjemmeside også for langsom?

Redirect guiden PHP / Vhost / htaccess

Redirect - Den ultimative guide til redirects

I dag kan man ikke have en hjemmeside uden at vide hvordan man redirecter, og så kan man lige så godt gøre det på den rette måde fra start, da det forkerte valg har en større indflydelse end du lige tror. De råd og tips jeg vil komme med her, henvender sig til de fleste hjemmesider på de fleste webhotelløsninger.

Hvad er en redirect?

En redirect, eller på dansk omdirigering, er det at man sender brugerne og søgemaskinerne til den rette side hvis de tilgår en side der engang har eksisteret på din hjemmeside, eller hvis du bare gerne vil omdirigere brugeren til en anden side end fx en 404 fejl side (Siden er ikke fundet).

Det sker jo at man laver om på URL strukturen på sin hjemmeside, sletter sider, flytter sider, skifter domæne mm. Og med en redirect, kan man sørge for at brugeren og søgemaskinerne finder ud af dette. Har du fx flyttet siden, er det ikke bare en god ide, du skal redirecte alt der tilgår den gamle URL, til den nye URL. Dette sikre både at brugere lander det rette sted, men det sikre også at eventuel værdi (linkværdi) følger videre til den nye URL.

Det er derfor vigtigt at man redirecter på den rigtige måde, og ikke bare omdirigere brugeren og andre besøgende visuelt, men at man fortæller brugerens browser, og især søgemaskiner at det der sker nu er en Redirect. Redirecter man korrekt, vil dette ske automatisk, men jeg har set mange som fx har lavet en javascript omdirigering, og stadig tror at dette er en reel 301 redirect.

Det vigtige er at der bliver sat det der hedder headere, denne vil indeholde fx 301 moved permanently, og det er den der fortæller at en side er flyttet til et andet sted.

PHP – vHost eller htaccess

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 redirecte på. Du har allerede læst hvad en redirect er, så er det tid til at du finder ud af hvilke typer redirect der findes til brug i vHost og htaccess.

Redirect

Redirect bruges når man har enkeltstående sider man gerne vil have omdirigeret til en anden specifik url eller webadresse. Det er denne du som udgangspunkt skal bruge da den på serverniveau ikke har den store indflydelse på performance, og den er også utrolig nem at bruge i de fleste tilfælde.
Redirect ser ud sådan:

Redirect 301 /gammel/fil.html https://kim-tetzlaff.dk/ny/fil.html

RedirectMatch

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 urls der skal omdirigeres. Det kan måske være at du har 20 sider du gerne vil redirecte, 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

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.
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 adreser), 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

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

TegnBeskrivelse 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
\sMatcher et white space (mellemrum)
Kim\sTetzlaff matcher Kim Tetzlaff.

RegEx kombinationer

Regex eksempler og 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 redirects 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.

TegnBeskrivelse 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
 

Omdirigeringer via .htaccess eller vHost.

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.

Klassisk Redirect

En klassisk redirect er den redirect 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å redirecter 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 redirectes 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 Redirect SEO venligt

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 sørge for at der bliver omdirigeret/redirected 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 redirecte 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
Redirect 301 /gammel/fil3.html https://kim-tetzlaff.dk/ny/fil3.html
Redirect 301 /gammel/fil4.html https://kim-tetzlaff.dk/ny/fil4.html
Redirect 301 /gammel/fil5.html https://kim-tetzlaff.dk/ny/fil5.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

Med 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 et andet domænes 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 alle andre domæner end hoveddomænet til hoveddomænet

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 til hoveddomæne ved html

http://wordpress.org/plugins/redirect-from-cdn/ Dette plugin til wordpress 301 redirecter alle html sider til blogdomænet, sådan at man undgår indeksering i Google på flere domæner. Det er set mange gange før at Google indeksere subdomæner selvom der i kildekoden er lavet et canonical link tag som peger på hoveddomænet.

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.
[/toggle]
[toggle title=”Skift fil endelsen, men kun på php filer” open=”no”]

Skift fil extention

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]

Skift fil endelsen, men kun på php filer

Skift fil extention

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 til en ny side

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 ren bogstav fil/mappe

nogen gange kan det være nødvendigt at lave et match kun på bogstaver, 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. 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

Filer skifter til mappe:

RedirectMatch 301 /([a-zA-Z]+)\.html$ https://kim-tetzlaff.dk/$1/

Redirect ren tal mappe/fil

RedirectMatch 301 ^/[0-9]+/(.*)\.html$ https://kim-tetzlaff.dk/ny/$1.html

Redirect filer/mapper hvor der er tal, bogstaver og måske 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 når query indeholder specifik tekst

RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^(.*)$ https://kim-tetzlaff.dk/? [L,R=301]

Fjern skråstreg/trailing slash fra url

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]

Fjern skråstreger hvis der er mere end en

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]

Redirect fra HTTP til HTTPS

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]

Omdirigeringer/Redirect via PHP.

At omdirigere via PHP kan i mange tilfælde være vejen du skal gå, ikke mindst fordi det er den metode der har mindst indflydelse på hjemmesidens generelle performance.

Til forskel for htaccess metoden som belaster hele tiden og ved hvert kald (læs mere om htaccess), så belaster PHP kun når selve omdirigeringen sker. Hvilket uden tvivl vil få sidens performance til at være bedre.

Men først skal du jo lige kende til den mest basale måde at omdirigere på.

Basal PHP redirect:

header ("Location: http://domæne.dk/");
exit;

Men vær obs på at denne kun laver en 302 (midlertidig) omdirigering.

Vil du gerne bestemme hvilken type omdirigering du vil lave, fx 301, 404 etc. skal du have yderligere en header på

header ("HTTP/1.1 301 Moved Permanently");
header ("Location: http://domæne.dk/");
exit;

Husk også at en omdirigering/redirect via PHP, skal ske før alt andet bliver skrevet ud. Så har du whitespace, echo, print, print_r() etc. før en omdirigering, vil den ikke virke og lave en fejl som fortæller at headeren er allerede sat.
Der er selvfølgelig undtagelser, hvis du fx bruger output buffering på hele indholdet, så vil du opleve at det er ligegyldigt hvor i dokumentet du laver en redirect via PHP.

Redirect alt der ikke er hoveddomænet til hoveddomænet

$hoveddomain = 'domæne.dk';
if($_SERVER['HTTP_HOST'] != $hoveddomain){
 header( 'HTTP/1.1 301 Moved Permanently' ); 
 header( 'Location: http://'.$hoveddomain.$_SERVER['REQUEST_URI'] );
 exit; 
}

Redirect specifik side til ny destination

// statisk 301 redirect via PHP
if($_SERVER['REQUEST_URI'] == '/sti/til/gammel/url.html'){
 header( 'HTTP/1.1 301 Moved Permanently' ); 
 header( 'Location: http://domæne.dk/sti/til/ny/url.html' );
 exit; 
}

Redirect alt der er i en bestemt mappe

// Redirect alt der er i mappen "/sti/til/gammel/"
if(strpos($_SERVER['REQUEST_URI'],'/sti/til/gammel/')){
 header( 'HTTP/1.1 301 Moved Permanently' ); 
 header( 'Location: http://domæne.dk/sti/til/ny/url.html' );
 exit; 
}

For marketers og affiliates

Leder du efter en god og hurtig løsning til at få omdirigeret dine sider fra internt link til eksternt link, samtidig med at Google ikke må indeksere det interne link. Så er der her en løsning, som har minimal indflydelse på hjemmesidens hastighed. Og ikke mindst kan klare flere tusinde af slagsen, hvis dette er nødvendigt.

En hurtig og god løsning på redirect

Opret en mappe på din FTP, kald den hvad du lyster, men sørg for at det ikke er et navn du bruger på din hjemmeside. du kunne kalde den “go”.

I den mappe opretter du en PHP fil, som du også kan kalde det du lyster, jeg kalder den typisk omdir.php. I den fil, skal du nu lave noget PHP kode.


$urlSkrevet = $_SERVER['REQUEST_URI'];

if($urlSkrevet == "/go/themeforest"){ // Redirect from ex. /go/themeforest
header ("Location: http://themeforest.net/"); // Redirect to
exit;
}

Det der sker her, er ganske simpel det at koden tager fat i urlen, og gemmer den i en variabel, som derefter bliver testet i en if sætning. Meget simpelt.

Man kan reelt bruge filen som den er nu, men lad os lige sikre den lidt mere, sådan at hvis der bliver skrevet noget som ikke findes i selve filen, så omdirigeres brugeren til forsiden. Så mister man ikke værdi på den måde, og man risikere heller ikke at brugeren eller søgemaskinerne får fat i en hvid side, uden indhold.

Det kan man gøre sådan:

header ("HTTP/1.1 301 Moved Permanently");
header ("Location: http://domæne.dk/");
exit;

Koden i hele filen, ser ud sådan:

$urlSkrevet = $_SERVER['REQUEST_URI'];

if($urlSkrevet == "/go/themeforest"){ // Redirect from ex. /go/themeforest
header ("Location: http://themeforest.net/"); // Redirect to
exit;
}

header ("HTTP/1.1 301 Moved Permanently");
header ("Location: http://domæne.dk/");
exit;

Lige nu sker der ikke noget selvom du linker til fx /go/themeforest. Da serveren lige skal vide at den skal tage fat i omdir.php når den kalder noget i “go” mappen. Dette gør man med en htaccess fil som placeres i go mappen også. Husk at filnavnet på en htaccess, er .htaccess

Header set X-Robots-Tag "noindex, nofollow"

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /go/omdir.php [L]

Header set X-Robots-Tag – Sørger for at siderne og linksne ikke indekseres.
Og resten sørger for at omdir.php bliver brugt hver gang noget i mappen “go” bliver kaldt.

Så skulle du være kørende 🙂

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 redirects.

Løs forskellige situationer

Du kender det sikkert, du køre med wordpress, men ved ikke hvordan man skal udføre de anvisninger jeg kommer med ovenfor når vi taler omdirigering. Men det er der selvfølgelig råd for. Du skal installerer et redirection plugin, der er flere af slagsen og de kan alle omdirigere en side til en anden.

  • Redirection
    https://wordpress.org/plugins/redirection/

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.

46 kommentarer til “Redirect guiden PHP / Vhost / htaccess”

    • 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 🙂

      Svar
    • 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.

      Svar
  1. 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. 🙂

    Svar
  2. 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

    Svar
  3. 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

    Svar
    • 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

      Svar
  4. 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

    Svar
    • 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.

      Svar
  5. 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

    Svar
    • 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.

      Svar
  6. 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!?

    Svar
    • 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.

      Svar
  7. 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

    Svar
    • 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 🙂

      Svar
      • 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?

        Svar
        • 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?

          Svar
        • 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.

          Svar
  8. 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

    Svar
    • 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 🙂

      Svar
  9. 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?

    Svar
    • 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

      Svar
  10. 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

    Svar

Skriv en kommentar

Målet er kvalitet

Det er mit mål at levere kvalitetsløsninger med høj fokus på hastighed og teknisk seo. Uanset om der er tale om små eller store løsninger, vil fokus altid være på hastighed og teknisk seo.