<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mikael Brevik &#187; referer</title>
	<atom:link href="http://mikaelb.net/emneord/referer/feed/" rel="self" type="application/rss+xml" />
	<link>http://mikaelb.net</link>
	<description>Bloggen</description>
	<lastBuildDate>Mon, 07 Sep 2009 20:11:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>En mer informativ error 404 side</title>
		<link>http://mikaelb.net/2008/12/en-mer-informativ-error-404-side/</link>
		<comments>http://mikaelb.net/2008/12/en-mer-informativ-error-404-side/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 23:18:23 +0000</pubDate>
		<dc:creator>Mikael Brevik</dc:creator>
				<category><![CDATA[Generelt]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[error 404 håndtering]]></category>
		<category><![CDATA[feilmelding]]></category>
		<category><![CDATA[HTTP_REFERER]]></category>
		<category><![CDATA[logg]]></category>
		<category><![CDATA[referer]]></category>

		<guid isPermaLink="false">http://mikaelb.net/?p=78</guid>
		<description><![CDATA[Dette skriveriet er løst basert på en ALA artikkel jeg leste her om dagen. Den omhandler hvordan du kan lage en feilmeldingsside som er mer informativ både til deg og brukeren som opplever den. ALA forfatteren har valgt å dele inn forskjellige error 404-meldinger i 4 grupper. Jeg derimot velger å sette disse til 3 [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_85" class="wp-caption alignright" style="width: 238px"><img class="size-full wp-image-85" title="lenkebrudd" src="http://mikaelb.net/wp-content/uploads/2008/12/lenkebrudd.jpg" alt="Lenkebrudd" width="228" height="75" /><p class="wp-caption-text">Lenkebrudd</p></div>
<p>Dette skriveriet er løst basert på en <a title="A List Apart: A More Useful 404" href="http://alistapart.com/articles/amoreuseful404">ALA artikkel</a> jeg leste her om dagen. Den omhandler hvordan du kan lage en feilmeldingsside som er mer informativ både til deg og brukeren som opplever den. ALA forfatteren har valgt å dele inn forskjellige error 404-meldinger i 4 grupper. Jeg derimot velger å sette disse til 3 for enkelhetens skyld.</p>
<ul>
<li>Feil fra brukerens side. Gammelt bokmerke, feilskreven URL.</li>
<li>Et brudd på en lenke på din side.</li>
<li>Et brudd på en lenke fra en annen side. Enten en søkeside eller en annen side.</li>
</ul>
<ol></ol>
<p>Hovedsakelig ønsker vi som utvikler og eier av siden informasjon dersom det er brudd på en lenke i din side, men også muligens fra andres sider. Dersom det er noen som lenker til siden din (kanskje en annen blogg) så kan du sende en e-post til de og informere om lenkebruddet. Gammelt bokmerke eller feil skrevet URL trenger vi ikke så mye informasjon om.</p>
<p>For å finne hvor brukeren kom fra kan vi bruke superglobale tabellen _SERVER og hente ut verdien av HTTP_REFERER. Det er viktig å huske at HTTP_REFERER ikke er 100% nøyaktig. Den fungerer bare dersom det blir linket igjennom en a-tag, eller igjennom form-submitt og bilde-kilde. Det fungerer altså ikke dersom det er linket igjennom en e-post, med en redirect, lasting igjennom XML, bokmerke og lignende. Det er også ganske lett å endre innholdet i HTTP_REFERER, så dersom den skal skrives ut må vi ta høyde for XSS. Siden dette ikke er en veldig essensiell funksjon vi skal lage, holder HTTP_REFERER lenge som en pekepinn på hvor brukeren kom i fra. Det er også ingen reell trussel for XSS siden vi ikke trenger å skrive ut verdien eller bruke den i en database eller lignende. HTTP_REFERER kan også ikke eksistere i enkelte tilfeller, derfor er det lurt å ta en isset()-test når man setter verdien.</p>
<p>Vi setter verdien av HTTP_REFERER slik:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$referer</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_REFERER'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$referer</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_REFERER'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>1. Gammelt bokmerke eller feilskreven URL</h3>
<p>Dersom $referer er null går vi ut i fra at det går under kategori 1. Vi har ingen stor nytteverdi av å vite dette i noen slags logg eller på e-post, derfor skriver vi bare ut til brukeren at de burde oppdatere bokmerkene sine, eller se etter korrekt side ved å bruke søketjenesten vi har på siden.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&lt;h2&gt;Feilmelding: 404 Fil ikke funnet!&lt;/h2&gt;
<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&nbsp;
Filen du letet etter finnes ikke her. 
&nbsp;
&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$referer</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Det ser ut til at du bruker et gammelt
	bokmerke eller har skrevet inn feil URl.
&nbsp;
Prøv søkefeltet på siden eller skriv inn
korrekt URL i adressefeltet i nettleseren din.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Vi skriver bare ut en enkel feilmelding til brukeren, og logger ikke eller noe i den dur.</p>
<h3>2. Et brudd på en lenke på din side</h3>
<p>Dersom det er et brudd i en lenke på vår side vil vi gjerne vite om det for å kunne korrigere feilen. Derfor kan vi velge å i tillegg til å skrive ut feilmelding så logger vi hendelsen og sender en e-post til administrator om hva som har skjedd.</p>
<p>Dersom vårt domenenavn er i $referer går vi ut i fra at det er en brudd i en lenke på siden vår. Det er ikke krise dersom noen har tuklet med HTTP_REFERER og lagt inn domenenavnet vårt. Det fører bare til en e-post som vi kan sjekke kjapt selv. Jeg tar en enkel test her for å vise konseptet.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">stristr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$referer</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SERVER_NAME'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	sendMailError404<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;BROKEN_LOCAL&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$referer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	logError404<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;BROKEN_LOCAL&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$referer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Det ser ut til at vi har et lenkebrudd på siden
	vår. Vi vil med dette se nærmere på saken og håper
	å få fikset det i løpet av kort tid.
&nbsp;
        Prøv søkefeltet på denne siden for å finne
	en annen link til denne siden.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Her bruker jeg to pseudo-funksjoner til å vise til hvordan en kan gjøre det. sendMailError404 sender rett og slett e-post til administrator som informerer om at det er et lenkebrudd på siden som $referer viser til. Loggen lagrer bare samme informasjon i en txt-fil på root-området eller lignende.</p>
<h3>3. Et brudd på en lenke fra en annen side</h3>
<p>Ved øvrig hendelser, hvor referer er satt men ikke inneholder domenenavnet ditt kan man gå ut i fra at det er en annen side som har en brutt lenke til siden din. Her er det kanskje ikke nødvendig å sende inn en e-post hver gang dette skjer. Ofte kan det være slik at søkesider har gamle sider indeksert og da kan det være litt plagsomt å få flere e-poster hver dag med informasjon om lenkebrudd fra f.eks Google. I dette tilfellet ville jeg bare ha logget hendelsen og med jevne mellomrom sjekket loggen etter noen lenkebrudd fra f.eks bloggrollen min eller andre sider.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
	logError404<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;BROKEN_EXTERNAL&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$referer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Det ser ut til at vi har et lenkebrudd på en
	ekstern side. Vi vil med dette se nærmere på saken og håper
	å få fikset det i løpet av kort tid.
&nbsp;
        Prøv søkefeltet på denne siden for å finne
	en annen link til denne siden.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Vi kan sette en komplett semi-kode på dette for å vise til hvordan det kan gjøres.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$referer</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_REFERER'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$referer</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_REFERER'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&lt;h2&gt;Feilmelding: 404 Fil ikke funnet!&lt;/h2&gt;
<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&nbsp;
Filen du letet etter finnes ikke her.
&nbsp;
&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$referer</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&nbsp;
Det ser ut til at du bruker et gammelt
	bokmerke eller har skrevet inn feil URl.
&nbsp;
Prøv søkefeltet på siden eller skriv inn
	korrekt URL i adressefeltet i nettleseren din.
&nbsp;
<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">stristr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$referer</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SERVER_NAME'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	sendMailError404<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;BROKEN_LOCAL&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$referer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	logError404<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;BROKEN_LOCAL&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$referer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&nbsp;
Det ser ut til at vi har et lenkebrudd på siden
	vår. Vi vil med dette se nærmere på saken og håper
	å få fikset det i løpet av kort tid.
&nbsp;
Prøv søkefeltet på denne siden for å finne
	en annen link til denne siden.
&nbsp;
<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
	logError404<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;BROKEN_EXTERNAL&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$referer</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&nbsp;
Det ser ut til at vi har et lenkebrudd på en
	ekstern side. Vi vil med dette se nærmere på saken og håper
	å få fikset det i løpet av kort tid.
&nbsp;
Prøv søkefeltet på denne siden for å finne
	en annen link til denne siden.
&nbsp;
<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Sette en PHP-fil som feilmeldingsdokument</h3>
<p>Når man har laget et PHP-dokument som inneholder koden over må man sette filen man lagrer det som til en Error 404 dokument. Dette gjør man i htaccess filen på følgende måte:</p>

<div class="wp_syntax"><div class="code"><pre class="htaccess" style="font-family:monospace;">ErrorDocument 404 /php/404.php</pre></div></div>

<p>Nå har vi en error 404 side som er mye mer informativ for både deg og brukeren. På denne måten kan vi også holde oversikt og få hjelp til å finne lenker som er brutt på andres sider som lenker til din side, eller lenker som er brutt på din egen side.</p>
<p>Som alltid setter jeg pris på tilbakemeldinger.</p>
<p>Ha en flott jul og et godt nytt år.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikaelb.net/2008/12/en-mer-informativ-error-404-side/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
