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:
- Indkommenterer mod-rewrite linierne i /.htaccess filen i websidens rod
- Sæt variablen $useModRewrite i /cms_baseconfig.inc.php til boolean true
- 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:
- En "base-url", f.eks. http://www.domæne.dk/
- index.php?
- mode=[indholdstype] - hvis mode ikke er defineret, er det en side
- Evt. "calendarid=" - eller et andet arkivid
- indholdsid - hedder de fleste steder blot "id", men har også andre navne. F.eks. "pageid" på sider.
- Ø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.