Avatar billede AnyFellow Mester
26. januar 2012 - 10:08 Der er 16 kommentarer og
1 løsning

Pæne URLs

Hej

Jeg har brug for noget hjælp i forhold til at få pæne urls.

Jeg har en url:
/index.php?navn1=value1&navn2=value2

Som jeg ønsker skal se således ud (der vil altid være en value1, hvis der er en value2):
/value1/value2/

Såfremt der ikke er nogen værdi i value 2, vil den se sådan her ud:
/value1/

Umiddelbart skal der vel også en kontrol ind, således at url'er der peger på mapper/filer der eksistere undtages fra ovenstående. Jeg går ud fra at følgende kan bruges til dette:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Sidst, men ikke mindst, skal jeg sikre mig mod duplicate content, hvilket vel sker ved at lave det således at index.php ikke kan tilgåes direkte. Det kan jeg også godt bruge hjælp til.
Avatar billede montago Praktikant
26. januar 2012 - 14:36 #1
Querystring ER pænt... virtuelle mapper giver kun problemer! - Trust me... sidder med ASP MVC3 som bruger URL-Rewrite til at lave asd/asd/Asd URL'er  og det er noget forbandet lort.

desuden... hvordan ved du at /value1/ ikke er en value2 type ??

Brug Querystring, det er bedre end alternativerne af mange grunde !
Avatar billede DeeDawg Nybegynder
26. januar 2012 - 18:37 #2
Du kunne også bare sende alt videre og lade PHP klare arbejdet for dig.
Avatar billede olebole Juniormester
26. januar 2012 - 17:09 #3
<ole>

- og alternativet er naturligvis at lade være med at lave lort, når man arbejder med den slags  *D

@kfisker: Mon ikke, du mener, at resultatet skal være: /navn1/value1/navn2/value2? Ellers er du i fare for at lave noget, du får problemer med i længden

/mvh
</bole>
Avatar billede AnyFellow Mester
26. januar 2012 - 17:40 #4
montago...> Det er selvfølgelig altid muligt for brugeren at ændre i hjemmesides url, på samme måde som det er muligt uden querystrings.

Er url'en ikke gyldig (indeholder forkerte værdier), vil forsiden blive vist.

Jeg er ikke enig at querystring er  bedre end alternativerne. Du kan spørge Google.

olebole...>  Umiddelbart har jeg ikke brug for navn1 og navn2, idet hele hjemmesidens opbygning er centreret omkring value1 og value2. Som skrevet kan der godt være en value1 uden en value2 med ikke en value2 uden en value1.

Jeg er ikke mget for at blive for konkret omkring hvad jeg skal bruge min hjemmeside til endnu, men et tilsvarende eksempel kunne være at hjemmesiden viser seværdigheder.

Klikker brugeren ind på Danmark vil url'en se sådan her ud:
/danmark/

Klikker brugeren ind på Viborg vil url'en se sådan her ud:
/danmark/viborg/

Inde under viborg er der en liste over seværdigheder i Viborg.
Avatar billede olebole Juniormester
26. januar 2012 - 17:56 #5
Jeg er ikke enig. Du har brug for variabelnavnene  =)

Du må aldrig gå udfra, forespøgslen stammer fra noget, du har lavet. Du skal altid vide, hvad det er for variabler, du arbejder med - og f.eks. ikke risikere, at du uforvarende kommer til at bytte rundt på variabler og deres værdier
Avatar billede AnyFellow Mester
26. januar 2012 - 18:06 #6
Jeg ved jo netop også hvad jeg arbejder med. Jeg kan ikke se at min risiko for at bytte rundt bliver større ved at tage navnene med, idet brugeren kan ændre som han/hun vil alligevel.

Mine url's blive mindre seværdige ved at se således ud:
/land/danmark/by/viborg

frem for
/danmark/viborg
Avatar billede olebole Juniormester
26. januar 2012 - 18:42 #7
@kfisker: Nej, du ved netop ikke, hvad du arbejder med, når du ikke kender dine variablers navne - det er fuldstændig grundlæggende programmeringsskik. Det er ikke en god løsning, du har gang i  =)

Kan du ikke lige vise mig et sted, hvor det foregår på den måde, du beskriver?
Avatar billede AnyFellow Mester
26. januar 2012 - 19:16 #8
DeeDawg...> Det er en mulighed, men nu kunne jeg godt tænke mig pæne urls.

olebole...> Det er vist en diskussion vi ikke blive enige om.

Jeg kan ikke lige findet et eksempel på det jeg ønsker, men der er nogle hjemmesider hvor de f.eks. kun har variabelnavn på første variabel:
http://webshop.coop.dk/kategori/boern/barne-og-klapvogne

Der er også stedet hvor de ikke har variabelnavn:
http://www.multikoeb.dk/braendekloever-563


De forudsætter begge at man kender variablerne.
Avatar billede AnyFellow Mester
26. januar 2012 - 19:18 #9
Det er f.eks. også ret gængs at sprog f.eks. angives i en url ved: /dk/

En hjemmeside som denne:
http://virtuelvis.com/gallery/css/rounded/

ville det vel være naturligt at forudsætte at den f.eks. kalder gallery.php med css+rounded som variabel.

Her forudsætter de også at de ved præcis hvordan deres url er opbygget.
Avatar billede olebole Juniormester
26. januar 2012 - 20:08 #10
Vedr. Coop's webshop har du næppe ret, men det er ikke til at vide. Vi kan ikke vide, om der f.eks. omstilles til


- og når du efterfølgende klikker på barnevogne, kunne det være:



I tilfældet med multikoeb.dk er der brugt en yderst alternativ  fremgangsmåde. Her resulterer et klik på et link med href'en:


- i, at jeg kommer til en side med adressen http://www.multikoeb.dk/braendekloever-563.

I tilfældet virtuelvis.com tager du helt objektivt fejl, da gallery er en mappe - og det er css også. Der er altså kun tale om én variabel og derfor ikke mulighed for forveksling.

Jeg siger skam ikke, vi nogensinde bliver enige i denne diskussion. Jeg prøver bare at promovere god, professionel kodeskik. Om du så vil lytte og lære, er en helt anden ting  =)
Avatar billede DeeDawg Nybegynder
26. januar 2012 - 20:17 #11
Jamen, det får du da også. Det kunne se sådan ud:

RewriteEngine On
RewriteBase /

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

Og:

<?php
    $uri = preg_replace("#/#", "", $_SERVER['REQUEST_URI'], 1);
    $requests = explode("/", $uri);
   
    $land = $requests[0];
    $by = $requests[1];
   
    echo "Du har valgt <strong>".$by."</strong> i <strong>".$land."</strong>";
?>

Så hvis du går ind på http://domæne.dk/danmark/viborg/, så vil du få dette resultat:

Du har valgt viborg i danmark


Dette er kun et eksempel, og du er selvfølgelig nødt til at tjekke hvad brugeren har skrevet, før du benytter det. Personligt, synes jeg dette er nemmere og at det giver en mere kontrol. :)
Avatar billede olebole Juniormester
26. januar 2012 - 20:27 #12
@DeeDawg: En løsning skal kunne holde til, at URL'er opbygges dynamisk - både på sitet selv og andre steder - uden rækkefølgen kan skabe problemer. Ellers vil det med til sikkerhed grænsende sandsynlighed før eller siden gøre det ... jvnf. Mr. Murphy og hans lov  *o)
Avatar billede DeeDawg Nybegynder
26. januar 2012 - 20:46 #13
Som sagt - et eksempel. :)
Avatar billede AnyFellow Mester
30. januar 2012 - 08:03 #14
Jeg takker for debatten. Jeg er stadig i overvejelser omkring hvordan jeg skal opnå det jeg ønsker.

olebole, DeeDawg...> Læg et svar og pointene er på vej.
Avatar billede olebole Juniormester
30. januar 2012 - 14:28 #15
Ellers tak, jeg samler ikke point. De må være DeeDawg's  =)
Avatar billede DeeDawg Nybegynder
30. januar 2012 - 15:02 #16
Skal gerne acceptere dem, men hvis du ikke vælger at bruge mit eksempel til noget, så tager du dem da bare selv. :)
Avatar billede AnyFellow Mester
31. januar 2012 - 09:17 #17
DeeDawg...> Har ikke besluttet om jeg bruger din løsning, men pointene er også for debatten.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester