Guide: Hvordan lage en virtuell URL

Søkemotorer og folk flest liker ikke lange URL’er, spesielt når strengen inneholder rare tegn som ? & og =. Enkelte kunder vil heller ikke se disse tegnene, og krever "vanlige" webadresser til sine nettsider. Dette er nok en problemstilling flere webutviklere har slitt med, og her er løsningen på det.

I forbindelse med et prosjekt, var en av spesifikasjonene at man skulle kunne bruke vanlige URL’er, samtidig som sidene fortsatt skulle være dynamiske og enkle å oppdatere. En løsning hadde vært å få backend-en til å lage .html filer som ble publisert når innholdet ble oppdatert, men da deler av innholdet ble generert i realtime, var dette ikke aktuelt. Løsningen på utfordringen lå i filen .htaccess.

Jeg har lagt merke til at når man åpner en død lenke, så står fortsatt URL’en til lenka i adressefeltet i nettleseren, noe som må kunne utnyttes. Videre er jo tilpassede feilmeldinger (404-sider) gammelt nytt, så hvorfor ikke lage et php-script som fanger opp alle døde lenker?

Planen var enkel i utgangspunktet. Sidene til kunden er lagt opp slik at man aksesserer “side.php”, og putter inn verdier i variablene “side.php” og “sak”, hvor “side.php” er navnet på websiden man ønsker å vise, og “sak” er ID nummer til innholdet man ønsker å vise. Istedenfor å lenke til “www.dittdomene.no/side.php?side=blogg&sak=1002” så ønsket kunden at man da lenket til “www.dittdomene.no/blogg/1002”. Hvis man da rett og slett ikke har noen “/blogg” mappe, og heller ikke noen “/1002” mappe, så vil man få en 404 når man prøver å åpne den lenken.

Første skritt ble å lage en tilpasset .htaccess fil, samt et php-script, kalt “maske.php”, som .htaccess filen videresender til.

<Files .htaccess>
order allow,deny
deny from all
</Files>

ErrorDocument 401 /maske.php
ErrorDocument 403 /maske.php
ErrorDocument 404 /maske.php

Når man skriver inn http://www.dittdomene.no/blogg/1002 vil .htaccess kalle opp “maske.php”, og da bør det være ganske enkelt å skjønne hva man er ute etter. Det er websiden, og ID nummeret til innholdet man vil ha, i dette tilfellet “blogg” og “1002”, slik at man kan sende dette videre til det opprinnelige scriptet “side.php”.

Hvis “www.dittdomene.no/blogg/1002” ble skrevet inn i adressefeltet i nettleseren, vil du få ut “/blogg/1002” fra miljøvariabelen $_SERVER[‘REQUEST_URI’], og så kan man bruke funksjonen explode(“separator”, $variabel), hvor man får et array der 0-nivået inneholder ordet “blogg”, og 1-nivået inneholder “1002”.

Les mer om explode variabelen her…

<?php
$sti = “sti/til/dit/scriptet/ditt/ligger/side.php”;
$innstreng = explode(“/”, $_SERVER[‘REQUEST_URI’]);
$side = $innstreng[0];
$sak = $innstreng[1];
$sti = $sti.”?side=”.$side.”&sak=”.$sak;
include($sti);
?>

Dette eksempel scriptet lar deg fortsatt bruke eksisterende løsninger, uten noen form for endring i hvordan den behandler variabler for å vise dynamiske sider. Det er fortsatt en del smårusk som kan by på problemer hvis man ikke er klar over det, som f.eks. vil nå besøkendes nettlesere tro at den virtuelle URL’en som du bruker faktisk finnes, så da må du lenke grafikk osv hardt fra dokumentet, f.eks. hvor man tidligere lenket til <img src=”gfx/bilde.jpg”> må man nå lenke til <img src=”/gfx/bilde.jpg”>.

Videre må man også huske å forandre på lenkene som publiseringsløsningen din genererer, slik at det som tidligere kom ut som
<a href=”?side=blogg&sak=1002″>Les mer…</a>
blir til
<a href=”/blogg/1002″>Les mer…</a>

Produkttest: Fitbit Charge 4

Fitbit har kanskje ikke oppdatert utseende på sin nyeste Charge, men det er innsiden som teller, som de sier og der har det skjedd ting. Det amerikanske selskapet ble kjøpt av Google for 2,1...