Udvidet url-adresse i PHP

Tags:    php htaccess mod-rewrite

Kære udviklere.

Nu har jeg prøvet at stille dette spørgsmål på eksperten.dk, men har ikke fået noget konkret svar, så håber at i kan hjælpe mig:

Jeg ønsker at lave en udvidet url-adresse, dvs. at det hører til en artikel. Resultatet skal komme til at se sådan her ud:
www.domæne.dk/show/17/mandag-aften/

ID nummeret fungere upåklageligt, men vil gerne have smidt emnet/overskriften ind i url-adressen med bindestreg istedet for mellemrum.

Jeg har fået det til at virke, men det er sådan set ligemeget hvad jeg skriver istedet for "mandag-aften", og jeg vil gerne have at den skal finde artiklen/indlægget i databasen ud fra både ID og emnet.

Jeg håber at i kan hjælpe, ihvertfald mere end den hjælp jeg fik det andet sted :)



10 svar postet i denne tråd vises herunder
5 indlæg har modtaget i alt 21 karma
Sorter efter stemmer Sorter efter dato
Hvis det er i forbindelse med et site hvor sidetitlen kan blive ændret af en bruger, er det ikke perfekt hvis man kan skrive vilkårlig tekst efter id'en og stadig få den samme side.

Hvis det eksempelvis er et cms-system hvor brugeren først oprette en side http://example.com/show/12/fesen-titel, og på et senere tidspunkt ændrer det til http://example.com/show/12/super-titel, er der chance for at begge links er registreret i diverse søgemaskiner, og rundt omkring på sites der linker til artiklen. Søgemaskinerne vil se det som to unikke links, og ens page-rank vil derfor blive delt på to sider.

Derudover synes jeg generelt at det er "forkert" at have flere links der peger på den samme resource, men det er jo et rimelig subjektivt argument :)

Løsningen på "problemet" er til gengæld rimelig simpel. Brug Kaspers metode, med en lille ændring. For det første skal man fange urltitlen:

Fold kodeboks ind/udKode 


Og så kan man i show.php gøre noget i stil med (kun pseudokode til at illustrere logikken)

Fold kodeboks ind/udKode 


Pointen er altså at finde artiklen udfra id'en alene, men at tjekke at artiklens titel passer med titlen i url'en. Hvis titlen ikke matcher redirecter man til den korrekte titel. På den måde får man gjort søgemaskinerne opmærksomme på at http://example.com/show/12/fesen-titel nu ligger på http://example.com/show/12/super-titel, og almindelige brugere vil kun se den aktuelle adresse.



Hej Daniele

Jeg holder faktisk med dig - jeg synes dit forslag er pænest, og det er også langt mere SEO-venligt.

Hvis dit site er dynamisk, kan du ikke lave det ønskede med htaccess alene. I stedet skal du benytte dig af en bootstrap-fil (læs her). Din htaccess skal du bruge til at sende alle requests direkte til din bootstrap-fil, som så kan anvende den requestede URL til at lave opslag i din database.

Din htaccess fil kan se sådan ud:
Fold kodeboks ind/udKode 

Den sørger for, at alle requests bliver sendt til index.php. Eksempel:
Fold kodeboks ind/udKode 


I index.php (din bootstrap-fil) kan du så behandle $_GET['url'], som du lyster. I dette tilfælde med en explode(), så du kan bruge de enkelte dele til at lave dit opslag.



Indlæg senest redigeret d. 16.05.2011 08:35 af Bruger #69
Hej Daniele,

Jeg er lidt i tvivl om hvilken del af det du gerne vil have hjælp til det? Er det det regulære udtryk du skal bruge i din .htaccess fil eller hvad? Og hvorfor vil du finde artiklen ud fra emnet hvis du har et ID med? Et ID skulle jo gerne være entydigt så det er både nemmere og hurtigere at finde dine artikler ud fra det :)

Mvh.

Kasper (TSW)



Hvorfor finde artiklen i databasen ved hjælp fra både overskift og id? Det ville da være meget nemmere bare at bruge id?



Jeg vil lige understrege at jeg er helt enig i at det er bedst at have titlen på artiklen med i URL'en også. Det jeg argumenterede imod var at bruge den information til at finde artiklen i databasen med - der er ID'et langt mere praktisk. Det synes jeg egentlig også fremgår tydeligt nok ud fra mit oprindelige indlæg :)

Man kan godt gøre det sådan som Phillip skriver, men jeg kan ikke se hvad man skal med den ekstra "bootstrap fil"? Det kommer naturligvis an på hvilken struktur ens site har, men personligt ville jeg blot have fx en article.php fil, der tog imod en id parameter og så ellers gøre resten via .htaccess. Man kan sagtens lade der stå hvad som helst i adressen efter fx "show" eller "article", og så bare udelukkende bruge det tal man matcher. Noget i den her stil:

Fold kodeboks ind/udKode 


I show.php kan du så finde artiklen ud fra det tal der er kommet med. Men igen, det kommer naturligvis an på site struktur og behov :)

Mvh.

Kasper (TSW)



#Kasper
Jeg syntes bare at det ville være pænere i url-adressen at lave det sådan :)
Det er sådan set lidt det hele jeg skal have hjælp til. Jeg bruger /show/17/ i min .htaccess fil, og den går igennem $_GET funktionen. Men jeg regnede med at der var nogle der kunne scripte det i php så det stod som /show/17/mandag-aften/ da jeg syntes at det er pænere :)



#Emil
Jeg syntes at det er pænere det andet. Jeg ved jo godt at det er nemmere med det andet, men jeg syntes at det er pænere på den anden måde.



Ja okay :)



Kasper har helt ret - jeg lod mig lige blinde af, at mine egne applikationer som regel anvender bootstraps i en MVC-opbygning - det kan sagtens simplificeres :-)



God pointe, AH :). +4 her fra.

Mvh.

Kasper (TSW)



t