Avatar billede mantichora Nybegynder
18. december 2007 - 20:15 Der er 8 kommentarer og
1 løsning

En hurtig mod_rewrite

Jeg er en klovn til regular expressions, så er der en flink sjæl der vil hjælpe mig med at lave et par mod_rewrite regler?

Jeg vil have så

domæne.dk/x
bliver til
domæne.dk/index.php?page=x

og
domæne.dk/x/y
bliver til
domæne.dk/index.php?page=x&review=y
Avatar billede jkampmann Nybegynder
18. december 2007 - 20:26 #1
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+)/?$ index.php?page=$1
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&review=$2
Avatar billede mantichora Nybegynder
18. december 2007 - 20:52 #2
Mange tak, det virker... men er lidt underligt.

Den første rule virker.
Den anden rule loader den rigtige side, men siden har pludselig ingen CSS eller billeder. Den loader kun HTML'en.

Er der nogen logisk forklaring på det?
Avatar billede mantichora Nybegynder
18. december 2007 - 21:13 #3
Nu har jeg leget lidt med det, og fundet ud af hvad jeg lidt regnede med: at hvis jeg udskifter skråstregen med et E (rent tilfældigt), virker det fint. Så det er fordi den tror adressen /x/y er i en MAPPE der hedder x, og derfor forsøger at referere til min css- og billedemappe inde i mappen x, som ikke findes.

Det synes jeg stadig er underligt, da jeg jo beder den redirect til en sti, der slet ikke har den skråstreg i sig, men det er det den gør.

Nogle idéer til et workaround?
Avatar billede jensgram Nybegynder
18. december 2007 - 21:32 #4
Problemet er, at klienten aldrig "får at vide" at der sker et redirect. Det sker kun på serveren, så klienten vil tro, at den rent faktisk befinder sig i /x/y relativt til roden.

RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [R]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&review=$2 [R]

bør tvinge klienten til loade den "oversatte" URL.
Avatar billede jensgram Nybegynder
18. december 2007 - 21:33 #5
... men måske du skulle lave dine henvisninger til CSS og billeder relative til roden (eller absolute) i stedet? Så får klienten jo altid de pæne URL'er at se.
Avatar billede mantichora Nybegynder
18. december 2007 - 21:39 #6
Det er netop det jeg ikke forstår.
Så vidt jeg forstår vil klienten kun se adressen:
domæne.dk/index.php?page=x&review=1
Da den anden adresse (/x/y)  vil blive oversat af Apache før klienten får den at se. Derfor burde klienten jo heller ikke på noget tidspunkt vide, at der har været en skråstreg i adressen?

Nå, men ja, root-urls er vel løsningen. Tak :)
Avatar billede jensgram Nybegynder
18. december 2007 - 21:52 #7
Hvad?

Nej, det er lige omvendt. Du indtaster "domæne.dk/x/y" i din browser (klienten). Serveren modtager en forespørgsel på "/x/y", hvilket den oversætter til "index.php?page=x&review=1" og herefter lader som om, at dette var den oprindelige forespørgsel fra klienten. Klienten modtager nu respons fra "domæne.dk/index.php?page=x&review=1", men tror det kommer fra "domæne.dk/x/y", da serveren jo svarer på netop dén forespørgsel. Derfor tror klienten også, at relative URL'er er relative til "/x/y".
Avatar billede mantichora Nybegynder
18. december 2007 - 23:37 #8
Nåja for satan. Dumt af mig - jeg fik på en eller anden måde ind i hovedet, at forespørgslen kom et andet sted fra.

Indtil videre har jeg lavet det om til at være en bindestreg imellem, så jeg slår op under domæne.dk/x-y i stedet for domæne.dk/x/y - så må jeg se om jeg gider lave absolutte links når siden engang er helt færdig og klar til upload.

Tak for det :)
Avatar billede jensgram Nybegynder
19. december 2007 - 09:41 #9
Jeg plejer at benytte

print '<base href="http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '" />';

i sidens <head>

Så virker relative links som før.
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
Uanset kodesprog, så giver vi dig mulighederne for at udvikle det, du behøver.

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