Pæne sideadresser i Instans CMS (url rewrite)

Instans CMS kan omskrive sideadresser (url'er) fra standard kode-sprog til såkaldt "pæne" url'er, der er nemme at læse/skrive og som giver siderne et ekstra skub på søgemaskinernes resultatsider.

Stort set al standardfunktionalitet i hjemmesiden kan få pæne sideadresser - det gælder bl.a. sider, nyheder, kalenderbegivenheder, billedgallerier samt varegrupper og produkter i shop modulet.

Sideadresser auto-genereres med udgangspunkt i f.eks. sidetitler, men kan nemt tilpasses på under "Søgeoptimering" på de enkelte indholdselementer.

Eksempler:

Type Adresse uden rewrite Adresse med rewrite
Side http://www.domæne.dk/index.php
?pageid=42
http://www.domæne.dk/douglas-adams/ eller http://www.domæne.dk/forfattere/douglas-adams/ (med "vis hierarkier slået til)
Nyhed http://www.domæne.dk/index.php
?mode=news&id=404
http://www.domæne.dk/bog-nyt/ny-bog-om-potteplanter/
Seneste begivenheder i kalenderen "Det sker på biblioteket" http://www.domæne.dk/index.php
?mode=events&id=2
http://www.domæne.dk/kalender/det-sker-paa-biblioteket/
Produkt http://www.domæne.dk/index.php
?mode=shop&groupid=2&productid=42
http://www.domæne.dk/shop/science-fiction
/douglas-adams/mostly-harmless/

Til udviklere: Sådan slår du "pæne" sideadresser til/fra

Systemet omskriver automatisk til "pæne" side adresser, hvis du:

  1. Indkommenterer mod-rewrite linierne i /.htaccess filen i websidens rod
  2. Sæt variablen $useModRewrite i /cms_baseconfig.inc.php til boolean true
  3. Sæt evt. variablen $useModRewrite_preserve_page_hierarchy til boolean true, hvis du ønsker at få menu-hierarki med i adressen. Eksempel: www.domæne.dk/navn-paa-menupunkt/navn-paa-undermenupunkt/navn-paa-side/. Dette koster en del ekstra server-kræfter, da stierne pt. ikke bliver cachet. Men det er testet og kører uden problemer på en dropdown-menu hvor op mod 100 side-adresser skal genereres ved hver sidevisning. Men test performance på dit eget setup inden du slår det til. Uden hierarkier er sideadressen på ovennævnte: www.domæne.dk/navn-paa-side/

For at slå "pæne" sideadresser fra, gør det samme - bare omvendt. :-D

Til udviklere: Sådan virker"pæne" sideadresser (url rewrite)

Instans benytter Apaches Mod-Rewrite kombineret med en række specialfunktioner (php) til at omskrive url'er.

En ikke-omskrevet url i instans-cms består af en eller flere af følgende elementer:

  1. En "base-url", f.eks. http://www.domæne.dk/
  2. index.php?
  3. mode=[indholdstype] - hvis mode ikke er defineret, er det en side
  4. Evt. "calendarid=" - eller et andet arkivid
  5. indholdsid - hedder de fleste steder blot "id", men har også andre navne. F.eks. "pageid" på sider.
  6. Øvrige variabler / metoder - f.eks. "printerfriendly=1" for en udskrifts-version af en side, eller "offset=" ved bladring

"mode=" omskrives ved opslag i tabellen REWRITE_MODES. her kan man f.eks. bestemme om "mode=newsletter" skal omskrives "/nyhedsbrev/", "/nyhedstjeneste/" eller noget helt tredje. Instans CMS understøtter omskrivning på flere sprog og derfor bør man oprette en række pr. mode pr. sprog i REWRITE_MODES tabellen. Der kan maksimalt være ét mode-keyword i hver url, og det skal være det første element efter base_url.

arkivid og indholdsid omskrives ved opslag i tabellen REWRITE_KEYWORDS. Typisk autogenereres rækkerne i REWRITE_KEYWORDS med baggrund i sidetitel eller lignende første gang et link genereres på siden - f.eks. i en menu. Keywords kan naturligvis redigeres under "søgeoptimering" på de enkelte elementer. Keywords til arkiver, som ikke kan redigeres i cms'et (f.eks. nyhedsarkiver) skal tilrettes direkte i REWRITE_KEYWORDS tabellen. Da indhold altid har et bestemt sprog, er keywords de samme på alle sprog.

Øvrige variabler, som ønskes omskrevet, skal oprettes i tabellen REWRITE_METHODS. Instans CMS understøtter omskrivning på flere sprog og derfor bør man oprette en række pr. mode pr. sprog i REWRITE_METHODS tabellen. Methods står altid til sidst i en url. Således kan sider i en standard-opsætning udskrives ved at tilføje /print/ til sidst i url'en. Hvis der skal en værdi med variablen, kan det ske på formen "metodenavn__værdi" - f.eks. /offset_10/

Hvis dele af en url ikke kan omskrives, bliver hele den oprindelige url benyttet på sitet. Det betyder f.eks. at hvis man har et plugin, der benytter en $_GET variabel, som ikke er registreret i REWRITE_METHODS tabellen, vil url'en ikke blive omskrevet.

Til udviklere: PHP-rewrite-funktioner

De centrale funktioner er:

function rewrite_links($str_html, $arr_content)

/cms/frontend/frontend_common.inc.php

Matcher alle url'er i href- og action attributter. selve omskrivningen håndteres af funktionen rewrite_urls_callback.

function rewrite_urls_callback($matches)

/cms/sharedfunctions.inc.php

Er primært callback-funktion for function rewrite_links, man kan også omskrive en enkelt url.

Lavet med Instans CMS - nem og enkel redigering af hjemmesider.