Gå til innhold

Spørsmål om Modrewrite for å gjøre URL'er penere


Anbefalte innlegg

Jeg har per i dag denne strukturen:

 

nettbutikk.no/produkt.php?ID=produsent-produktnavn

 

Har laget en modrewrite rule som gjør at jeg kan skrive:

 

nettbutikk.no/produkt/produsent/produktnavn/ som er mye enklere URL.

 

Problemet er at når den URL'en lastes i nettleseren lastes ingen bilder, stylesheets etc. Årsaken til det er at dette er kodet med relativ url, og derfor leter den nå etter dette på:

nettbutikk.no/produkt/produsent/produktnavn/stylesheet.css i stedet for nettbutikk.no/stylesheet.css

 

Finnes det noen enkel løsning på dette? Jeg ønsker ikke å endre alle linker på hele nettstedet... Vil helst at den gamle metoden også skal fungere.

Endret av _named_
Lenke til kommentar
Videoannonse
Annonse

Dette vil relativt åpenbart ikke la seg gjøre. mod_rewrite lurer nettleseren til å tro at den aksesserer en mappestruktur, mens det i realiteten blir gjort om til en «query»-streng uten at nettleseren har merket en ting. Nettleseren vil såklart ta utgangspunkt i mappestrukturen den tror eksisterer, og resultatet erfarer du jo selv. I bunn og grunn får du igjen for å ikke bruke absolutte baner, noe iallfall jeg helt klart foretrekker over relative baner (det er noe forbanna herk).

 

Red.: Når jeg tenker meg om så kan det vel gå å legge til enda en regel, samme som den eksisterende bare med stylesheet.css lagt på tilslutt og at det skal tolkes som nettbutikk.no/stylesheet.css.

Endret av Ernie
Lenke til kommentar

Å bruke absolutte baner er ikke mulig siden vi tester/utvikler nettsidene med andre url'er. Trodde for øvrig at absolutte baner var fyfy i programmerings-verdenen... (dette er faktisk eneste gang jeg noen gang har vært borti en fordel med statisk bane...)

 

Tenkte at siden apache har funksjoner for å "redirecte" url-ene (mod_rewrite), burde det vel også være en funksjon som tok hensyn til hvor filene faktisk ligger. Siden den vet at filen som serveres er nettbutikk.no/produkt.php - burde det da ikke være så vanskelig å lage en funksjon i apache som gjør at den skjønner at relative filer da skal være relativ filen som faktisk serveres...

 

Men det er altså slik å forstå at eneste løsningen her er statiske baner? (som du nevner er det sikkert en mulighet for å få dette til med stylesheet'et, men det hjelper ikke så mye når alle bilder og andre filer får samme problem).

Endret av _named_
Lenke til kommentar
Å bruke absolutte baner er ikke mulig siden vi tester/utvikler nettsidene med andre url'er. Trodde for øvrig at absolutte baner var fyfy i programmerings-verdenen... (dette er faktisk eneste gang jeg noen gang har vært borti en fordel med statisk bane...)
Vel, da er det en god ide å ikke overskrive konfigurasjonsfilene slik at hver enkelt installasjon kan ha sine egne baner og URL-er i konfigurasjonen. Etter min mening er ikke konfigurasjon noe man sprer rundt. Skal man gjøre endringer får det være i en mal e.l. som man kan sjekke opp mot.

 

... og ja, jeg er klar over at relative baner er rimelig populært, noen vil sikkert kalle absolutte baner for fy-fy så lenge man ikke trenger det. Jeg er derimot av en helt annen oppfattning, og jeg er nok ikke helt alene om det :) Dog, det er under sterk forutsettning at det er automatisk konstruerte baner og ikke hardkodede (som i mine øyne virkelig er ille).

 

Tenkte at siden apache har funksjoner for å "redirecte" url-ene (mod_rewrite), burde det vel også være en funksjon som tok hensyn til hvor filene faktisk ligger. Siden den vet at filen som serveres er nettbutikk.no/produkt.php - burde det da ikke være så vanskelig å lage en funksjon i apache som gjør at den skjønner at relative filer da skal være relativ filen som faktisk serveres...
Problemet er jo at du i praksis skriver om en URL, og det gjør at apache ikke «veit» bedre enn de reglene du setter.

 

Men det er altså slik å forstå at eneste løsningen her er statiske baner? (som du nevner er det sikkert en mulighet for å få dette til med stylesheet'et, men det hjelper ikke så mye når alle bilder og andre filer får samme problem).
Ja, enten absolutte baner eller legge til flere regler til mod_rewrite.
Lenke til kommentar

Dersom du har alle bildene i en mappe, kan du lage flere regler som sier at alle forespørsler etter bildefiler som ikke finnes på forespurt plassering, skal skrives om til /img/[fil] osv. Tilsvarende med css-filer.

 

Tenkte at siden apache har funksjoner for å "redirecte" url-ene (mod_rewrite), burde det vel også være en funksjon som tok hensyn til hvor filene faktisk ligger. Siden den vet at filen som serveres er nettbutikk.no/produkt.php - burde det da ikke være så vanskelig å lage en funksjon i apache som gjør at den skjønner at relative filer da skal være relativ filen som faktisk serveres...

Da måtte den ha skrevet om all html-koden on-the-fly. Lite gunstig..

Lenke til kommentar
  • 4 uker senere...

Selv pleier jeg å definere root-URL i en konfigurasjonsfil. Dette muliggjør å skrive URL-er relative til prosjektet, og samtidig kunne flytte det rundt, bare ved å endre litt i konfigurasjonsfilen. Da oppnår du ikke problemet med mod_rewrite.

 

gen-config.php

<?php
$url = 'http://www.mitt-domene.no/';
?>

 

index.html

<link rel="stylesheet" href="<?=$url;?>css/style.css" type="text/css" media="all" />

Endret av Jonas
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...