Avatar billede cronck Nybegynder
10. marts 2009 - 20:33 Der er 11 kommentarer og
1 løsning

Query-string / / refererer til DB ?

Hej eksperter,

Jeg har undret mig en lille smule over hvordan man laver følg. på ens side:
http://da.wikipedia.org/wiki/Vin

Jeg går udfra at Wikipedia slår "Vin" op i en database eller lign?

Hvordan kan jeg lave noget som fungere på samme måde?
Avatar billede Slater Ekspert
10. marts 2009 - 20:41 #1
Det er lavet med url-rewriting på serveren. For at kunne fortælle dig mere om det, er jeg lige nødt til at vide:

- Kender du til at bruge query strings normalt? Altså kan du godt finde ud af at hente en artikel der hedder "vin" ud fra en database, hvis du får url'en: artikel.php?artikel=vin ?

- Hvilken server har du eller dit webhotel? Hvis du ikke ved det, ved du så hvilket OS den kører? Windows/Linux?
Avatar billede cronck Nybegynder
10. marts 2009 - 20:45 #2
Bruger DomainDirect.dk. Tror at de kører Unix.

Ja, er vant til at behandle query-strings.

Har bare spekuleret her idag, over hvordan man laver det smartest som det for eks. er her på Exp, eller for den sags skyld Wikipedia.

Tænkte at det var en mulighed at "splitte" hele adresse-feltet ad, men vidste ikke om der fandtes bedre/smartere muligheder. :)
Avatar billede Slater Ekspert
10. marts 2009 - 20:57 #3
Ja, jeg har også et par Domandirect sider. God host. De kører med Linux og Apache - og det betyder også at du kan bruge .htaccess til at lave den effekt relativt nemt.

Først skal du oprette en fil der hedder ".htaccess" - ja, med punktum først. Den kan være lidt tricky at oprette i Windows, da den ikke er særlig glad for filnavne der starter med punktum, men i værste fald kan du kalde den noget andet, og så omdøbe den efter du har smidt den op på FTP'en. Den skal ligge i roden af dit webhotel (dvs. inde i htdocs-mappen)

I den fil skriver du f.eks.:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteRule (.*)$ index.php?q=$1 [L]

-- Så vil serveren viderestille alle sider til din index.php, og smide stien ind i ?q=

F.eks. hvis du går ind på http://www.ditdomæne.dk/fisk - så vil serveren skrive det om, så du i virkeligheden går ind på http://www.ditdomæne.dk/index.php?q=fisk
Derfra er det rimelig nemt at ændre det til dit behov.

Du kan også søge på "mod_rewrite" på Google - der er masser af tutorials og artikler om hvordan du kan bruge det.
Avatar billede cronck Nybegynder
10. marts 2009 - 21:14 #4
Ahh...

Det er jo skide smart :D

Havde som sagt forestillet mig at jeg skulle hive hele querystring'en ind og splitte den ad.
Kan dog se at det kan gøres langt mere simpelt. :)

For lige at være helt sikker - http://www.domæne.dk/fisk?cmd=0&dyr=hest

Ville den så automatisk smide de 2 nye værdier ind som hvis det var index?cmd=0&dyr=hest ?

Du må gerne smide et svar, da der i vikeligheden er nok her til at jeg selv kan arbejde videre.

I øvrigt, god stil at du forklarede hvordan .htacces kan oprettes osv.
Vidste det udemærket i forvejen, men hvis andre en dag søger herind og netop ikke har erfaring med det, ville det være meget nemmere for dem. :)
Avatar billede Slater Ekspert
10. marts 2009 - 21:23 #5
Det jeg skrev dér var en simpel version - den tager bare alt du skriver efter domænet, og smider det ind som querystring.

Hvis du skrev domæne.dk/fisk?cmd=0&dyr=hest ville det blive til domæne.dk/index.php?q=fisk?cmd=0&dyr=hest - ikke specielt hensigtsmæssigt.
- Hvis du vil lave muligheder for at smide flere variabler ind, kan du enten skrive regexp'et i RewriteRule om, eller du kan bare lave dit eget system og så dele det op i PHP, f.eks. med explode() funktionen :)
Avatar billede cronck Nybegynder
10. marts 2009 - 21:27 #6
Simpelt kan sommetider være nok :)

Jeg tror jeg i første omgang vil google mig frem til nogen flere eksempler, inden jeg tager det i brug.

Havde bare ingen idé om hvad man kaldte dette "trick" :)
Avatar billede jensgram Nybegynder
11. marts 2009 - 07:53 #7
http://www.domæne.dk/fisk?cmd=0&dyr=hest

kan blive til

http://www.domæne.dk/?q=fisk&cmd=0&dyr=hest

hvis du ændrer

RewriteRule ^.*$ - [NC,L]

til

RewriteRule ^.*$ - [L,QSA]

QSA = Query String Append

Desuden er der intet behov for No Case på "."
Avatar billede jensgram Nybegynder
11. marts 2009 - 07:54 #8
Og det var naturligvis http://www.ditdomæne.dk/index.php?q=fisk&cmd=0&dyr=hest i stedet :)

Er imidlertid blevet i tvivl om, hvorvidt det er det, du spørger om.
Avatar billede cronck Nybegynder
11. marts 2009 - 19:30 #9
Ved nærmere eftertanke, er det slet ikke sikkert at det behøver at blive anderledes end det første eksempel til mit nuværende projekt, som gav http://www.ditdomæne.dk/index.php?q=fisk :)

Det sidste jeg mente, var om man på en simpel måde kunne tilføje flere parametre efter /fisk , som for eks. ved at kalde /fisk&cmd=100 der skulle ende med at køre /index.php?q=fisk&cmd=100 :)
Avatar billede cronck Nybegynder
12. marts 2009 - 00:19 #10
Hvis I stadig vil give en hånd med på trods af at spørgsmålet er lukket, ville jeg være dybt taknemmelig. :D

RewriteEngine on
RewriteRule (.*)/$(.*)/ index.php?page=$1&id=$2
RewriteRule (.*)/$(.*) index.php?page=$1&id=$2

"article/240/" istedet for "index.php?page=article&id=240"

Så får jeg følg. output:
$_GET['page'] = "article/240"
$_GET['id'] = "" / NULL

Kan I sige hvad jeg har gjort galt?

Begge dele må i øvrigt gerne kunne indeholde tal og bogstaver.
Avatar billede cronck Nybegynder
12. marts 2009 - 00:31 #11
Har selv fundet ud af det. :)
Avatar billede Slater Ekspert
12. marts 2009 - 14:17 #12
Det var godt :)
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