Avatar billede thb Nybegynder
29. september 2004 - 00:05 Der er 18 kommentarer og
1 løsning

Path info

Hej alle

Jeg sidder og prøver at lave nogle venlige urls.

Jeg har kigget på en artikel inde på zend.com, hvor man får noget afvide om path_info...

Nu har jeg så lavet et link som hedder index.php/kategori/12/

Men når jeg trykker så kan den ikke finde mine billeder, links og css filer.. Den finder filen index.php.

Jeg måtte så gå ind og skrive de direkte stier på alle billeder osv... Er det meningen ?

Thomas
Avatar billede Slettet bruger
29. september 2004 - 00:09 #1
Kort sagt: Ja, enten det eller sørge for at index.php-scriptet også kan håndtere billeder og andet.

Husk, at når der i HTML-koden på siden, der kommer frem ved index.php/kategori/12/ står billede.jpg så tror browseren jo at den skal hente index.php/kategori/12/billede.jpg, så enten skal du skrive /billede.jpg eller få scriptet til at håndtere det.
Avatar billede sukos Juniormester
29. september 2004 - 06:40 #2
Jeg bruger altid / som start på at definere stien

<link rel="stylesheet" type="text/css" href="/css_style.css">
<img scr="/billeder/billede.jpg">
Avatar billede thb Nybegynder
29. september 2004 - 08:20 #3
Ja okay....

Er der en smart måde at styre en path_info, eller skal jeg i toppen af hver side defienere/dele path info op i de variabler som jeg regner med at der er.

Thomas
Avatar billede Slettet bruger
29. september 2004 - 23:53 #4
Hvis du laver dit site på den måde, bliver der vel kun en hovedside?

Jeg ville nok lave noget hvor hovedsiden pillede pathinfo fra hinanden, og ud fra første del inkluderede en anden fil til at tage sig af den relevante funktionalitet. Den anden fil skulle så selv tage sig af at finde ud af, hvad de næste dele af path betyder. På den måde kan man have flere forskellige størrelser af stier f.eks.:

index.php/nyheder/sport/12
index.php/nyheder/sport/ (for en oversigt)
index.php/nyheder/politik/
index.php/brugere/thb (Dvs. den slår brugerprofilen op ud fra brugernavn)

I dette eksempel har nyheder 1 eller 2 paramatre, hvor brugere kun har 1.
Avatar billede coderdk Praktikant
30. september 2004 - 01:04 #5
Jeg kan klart anbefale at gøre det med mod_rewrite...
I .htaccess:

RewriteEngine On
RewriteBase /
RewriteRule nyheder/([a-zA-Z]+)/? /nyhed_list.php?kategori=$1
RewriteRule nyheder/([a-zA-Z]+)/([0-9]+)/? /nyhed_vis.php?kategori=$1&id=$2
RewriteRule brugere/([a-zA-Z]+)/? /bruger_vis_profil.php?brugernavn=$1

Osv... Ikke testet, men det er i hvert tilfælde princippet i det :)
Avatar billede thb Nybegynder
30. september 2004 - 09:03 #6
Jeg ved ikke helt hvordan man får mod_rewrite til at virke...

Jeg har lavet sådan en funktion som kører path_info igennem i toppen af alle sider, på hver side bliver variablen $GET så sat til et eller andet, og hvis stien hedder index.php/nyheder/4/ så kan jeg så skrive $GET['nyheder'] og så printer den 4

Thomas
Avatar billede coderdk Praktikant
30. september 2004 - 12:44 #7
Hvis mod_rewrite er i din apache, så virker det jeg skrev - Det skal bare stå i .htaccess i din webroot :)
Avatar billede thb Nybegynder
30. september 2004 - 14:59 #8
Jeg har prøvet at slå mod_rewrite til på min hjemmeserver, men det er ikke lykkedes...

Thomas
Avatar billede thb Nybegynder
30. september 2004 - 15:07 #9
Jeg har fjernet # foran load module mod_rewrite og foran addmodule mod_rewrite.c eller noget i den stil... Og så gemt filen igen, og nu har jeg så lavet en fil i min web rod som hedder .htaccess hvor jeg har skrevet:

RewriteEngine On
RewriteBase /
RewriteRule tilbud/([a-zA-Z]+)/? tilbud/nyhedsbrev.php?kategori=$1

skulle jeg så ikke kunne skrive localhost/tilbud/sport/ f.eks og så skulle den vise localhost/tilbud/nyhedsbrev.php?kategori=sport ???

Thomas
Avatar billede Slettet bruger
30. september 2004 - 15:14 #10
Jeg ved ikke om det hjælper, men prøv at tilføje en / således:

RewriteRule tilbud/([a-zA-Z]+)/? /tilbud/nyhedsbrev.php?kategori=$1
Avatar billede coderdk Praktikant
30. september 2004 - 15:15 #11
Rewrite bruger en "virtuel" mappe, så prøv lige og se om det virker med:

RewriteEngine On
RewriteBase /
RewriteRule tb/([a-zA-Z0-9]*)/? tilbud/nyhedsbrev.php?kategori=$1

Hvis ikke det virker, så prøv lige med:

RewriteRule tb/([a-zA-Z]*) tilbud/nyhedsbrev.php?kategori=$1
Avatar billede coderdk Praktikant
30. september 2004 - 15:16 #12
Ja, prøv også lige hvad sandbox skriver - Men jeg måske er det et problem at "tilbud" både bliver brugt i reglen og der hvor den skal rewrites...
Avatar billede Slettet bruger
30. september 2004 - 15:30 #13
Jeg kunne ikke lige finde ud af, hvordan Apache gør, hvis den oprindelige URI matcher flere forskellige som i:

RewriteRule nyheder/([a-zA-Z]+)/? /nyhed_list.php?kategori=$1
RewriteRule nyheder/([a-zA-Z]+)/([0-9]+)/? /nyhed_vis.php?kategori=$1&id=$2

Problemet er jo, at nyheder/sport/1 også matcher på den første, så er URIen overhovedet intakt, så regel to kan fange og ændre på den?
Avatar billede coderdk Praktikant
30. september 2004 - 15:38 #14
1) RewriteRule nyheder/([a-zA-Z]+)/? /nyhed_list.php?kategori=$1

2) RewriteRule nyheder/([a-zA-Z]+)/([0-9]+)/? /nyhed_vis.php?kategori=$1&id=$2

nyheder/sport/1 vil kun matche 2'eren - "nyheder/([a-zA-Z]+)/?" betyder jo "nyheder/ efterfulgt af X bogstaver a-z eller A-Z efterfulgt af / (men ikke nødvendigt da der er ? efter)....

1'eren vil kun matche med f.eks. /nyheder/sport eller /nyheder/heste/ 2'eren kræver at der er X tal efter / altså f.eks. /nyheder/sport/123
Avatar billede thb Nybegynder
30. september 2004 - 17:28 #15
Der er ikke rigtig noget af det der virker...
Jeg synes at have prøvet alle de forskellige sammensætninger...

Jeg dropper det sku bare... Mit wannabee script virker også fint..

Tusind tak for hjælpen, lægger i ikke nogle svar... :D

Thomas
Avatar billede coderdk Praktikant
30. september 2004 - 17:29 #16
Hvis rewrite ikke virkede, så er det de andres point :)
Avatar billede Slettet bruger
30. september 2004 - 21:26 #17
coderdk:

Jeg har nu læst lidt på http://httpd.apache.org/docs/mod/mod_rewrite.html og det ser ud til at jeg havde ret. Der benyttes normale regexp, og nyheder/sport/2 passer jo også på nyheder/[a-zA-Z]+/ for der står jo de ting i urlen. Derfor vil den blive omskrevet, og tallet vil blive smidt væk. For at løse det, skal man angive, at strengen slutter efter den sidste skråstreg:

RewriteRule nyheder/([a-zA-Z]+)/?$ /nyhed_list.php?kategori=$1
Avatar billede Slettet bruger
30. september 2004 - 21:27 #18
Her er mit svar.
Avatar billede coderdk Praktikant
01. oktober 2004 - 03:02 #19
Bah, det er da også rigtigt - Vidste det jo egentlig godt :)
Man kan dog også bytte rundt på dem ;)
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