Rewrite av dynamisk url

En tråd i 'PHP, SQL og databaser' startet av Mr Vest, 2 Feb 2010.

  1. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Jeg kan ikke annet enn og beklage en tullete tittel her. Jeg vet ikke hva jeg skal kalle dette her.

    Eksempel på url i dag: index.php?do=register

    Hvordan kan jeg få innholdet på url over til å dukke opp på /register/ ? , og samtidig sørge for at ikke begge to, /register/ og index.php?do=register men kun 1 av dem bli indeksert i Google?
     
  2. Daniel Johnsrud

    Daniel Johnsrud Medlem

    Innlegg:
    104
    Har du mange forskjellige argumenter til forskjellige handlinger? eller er "?do" den eneste?

    Uansett svar på det spørsmålet så gjør kan du gjøre dette med "mod_rewrite" (.htaccess fil)
    Her er noen eksempler:

    Hvis ?do er eneste argumentet som blir benyttet:
    HTML:
    RewriteEngine on
    RewriteRule ^([a-zA-Z0-9]*)/$	  	       index.php?do=$1
    
    I dette eksemplet blir <url>/<verdi>/ pekt til "index.php?do=<verdi>"


    Hvis du f.eks differensierer handlinger slik:
    ?do=handling
    ?page=helside
    så er det en fordel å legge inn en ekstra verdi i rewriten din.
    F.eks
    HTML:
    RewriteEngine on
    RewriteRule ^side/([a-zA-Z0-9]*)/$	       index.php?page=$1
    RewriteRule ^([a-zA-Z0-9]*)/$	  	       index.php?do=$1
    
    Koden skriver lagrer du i en fil du kaller .htaccess , og laster opp i rotmappen til aktuellt domene.
     
  3. Daniel Johnsrud

    Daniel Johnsrud Medlem

    Innlegg:
    104
    glemte å nevne at "mod_rewrite" er en apache modul, som må være enebled hvis dette skal fungere (De fleste hoster tillater at du selv aktiverer den, eller har den standard aktiv.)

    Dette er derfor uanvhengig av hvem programmeringsspråk du skriver i, så lenge det er apache server.
     
  4. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Jøsses, nå fikk jeg litt smått sjokk her jeg sitter. Takk for godt og utfyllende svar. .htaccess og meg er faktisk meget store uvenner, vi krangler enormt mye omtrent hver eneste gang vi møtes desverre. :(

    Jeg skal kikke litt på eksemplene dine og teste litt i løpet av morgendagen. Takk igjen. :)
     
  5. Daniel Johnsrud

    Daniel Johnsrud Medlem

    Innlegg:
    104
    Bare hyggelig det =)
    Ja, Jeg har ikke alltid hvert venn med .htaccess jeg heller.

    Kjør phpinfo(); først, og sjekk om modulen ligger der:
    [​IMG]


    Ligger den der så er resten plankekjøring =)
     
  6. Tonny Kluften

    Tonny Kluften Administrator

    Innlegg:
    15.966
    .htaccess er vår venn :)

    Nå er du ikke rasjonell, krangle med en som alltid løser masse problemer?:rolleyes:

    Finnes det virkelig Apacheinstallasjoner uten mod_rewrite? Ikke på servere i kommersiell drift ihvertfall.
     
    Sist redigert: 3 Feb 2010
  7. Daniel Johnsrud

    Daniel Johnsrud Medlem

    Innlegg:
    104
    Nei det er heller tvilsomt Tonny.
    Men greit å vite hva det er man faktisk bruker for å se litt sammenhengen også =)

    Jeg vet det faktisk er noen hoster som har default rewrite disabled, der man selv må enable.
     
    Tonny Kluften liker dette.
  8. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Dette ser ut til å fungere veldig bra. Akkurat nå har jeg kun brukt det første av de to eksempler lenger oppe, og det er et par småting jeg tenker litt på i forbindelse med den...

    Det jeg legger merke til her, det er at jeg måtte legge til en / foran alle stilarkene som hentes ut i header for at nettleseren skulle finne dem. Det var litt rart syns jeg. Noen tanker om hvorfor det? Ikke noe viktig denne her altså, det funker helt greit med den lille slasjen foran der altså.

    Denne fungerer kun dersom jeg ikke har / på slutten. Vil det kunne være negativt for SEO dersom jeg legger til både med og uten denne / på slutten, dvs, slik at samme innholdet finnes på domene.com/about og domene.com/about/ ?

    Og sist men ikke minst, vil søkemotorene kunne se at jeg faktisk har en rewrite her? Eller vil søkemotorene indeksere kun /about? eller /about/ ? Eller begge to? Hehe... :)
     
  9. olafmoriarty

    olafmoriarty Medlem

    Innlegg:
    751
    Grunnen til at du må legge til / foran alle stilark er at når du er på url-en about tror nettleseren at du er inne i en ny mappe. Om du bare skriver stil.css tror nettleseren at du er ute etter /about/stil.css. Og den finnes jo ikke.

    For at url-en skal virke både med og uten skråstrek på slutten, legg til et spørsmålstegn etter siste skråstrek i RewriteRule-en din.

    Omskrivingen skjer på serveren din, så teknisk sett kan ikke søkemotorene se at du har en omskriving der. Men det er jo helt vanlig i all mappestruktur at /about og /about/ er samme fil, så jeg kan ikke tenke meg at de indekserer begge to ...

    Kan ikke tenke meg at dette skal være negativt for SEO.
     
    Mr Vest liker dette.
  10. Daniel Johnsrud

    Daniel Johnsrud Medlem

    Innlegg:
    104
    Så bra =)
    Problematikken rundt stilark-banen var faktisk ukjent for meg. (Sikkert fordi jeg bruker fullstendige prosjekt baner lokalt.), Ikke sikker på årsaken, men du kan jo prøve å endre
    HTML:
    RewriteEngine on
    RewriteRule ^([a-zA-Z0-9]*)/$ index.php?do=$1 
    
    til
    HTML:
    RewriteEngine on
    RewriteRule ^([a-zA-Z0-9]*)/$ ./index.php?do=$1 
    
    Men jeg er ikke sikker på om det utgjør noen praktisk forskjell.

    Den fungerer kun med backslash etter linken ja, vil du endre det så gjør du slik:
    HTML:
    RewriteEngine on
    RewriteRule ^([a-zA-Z0-9]*)$ index.php?do=$1 
    
    eventuellt begge:
    HTML:
    RewriteEngine on
    RewriteRule ^([a-zA-Z0-9]*)/?$ index.php?do=$1 
    
    Når det gjelder SEO så skal ikke det ha noe å si, da søkemotorer indekserer alt i en bane før & blir dukker opp. Så søkemotor hadde indeksert index.php?do=Login , men hvis du f.eks hadde en egen side for "Brukeravtale" som ligger på index.php?do=Login&show=UserAgreement så hadde ikke innholdet i den blitt indeksert.

    Søkemotoren indekserer det du linker til, så om du linker til /login eller /login/ er opp til deg, så vidt jeg vet skal ikke siden bli indeksert 2 ganger.
     
    Sist redigert: 4 Feb 2010
  11. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Skjønner skjønner. Jeg fant omsider ut hvordan denne her fungerte. Kjempeflott! :)

    Dette ble jo rett og slett enormt bra. Jeg er litt sjokkert over at jeg ikke har tenkt på og gjøre dette før nå. Takk for alle svarene!
     
  12. Pong

    Pong Jeg selger sʇɥƃıluʍop :)

    Innlegg:
    3.459
    Jeg bumper denne tråden litt fremfor å lage en ny (men modsene kan sikkert flytte hvis det anses å være bedre).

    Jeg sliter med denne url'en:
    http://www.festivo.nl/nl/musician.php?name=Herman+van+Vliet

    som jeg vil videresende til:
    Festivo

    siden det er få tilfeller (noen innlenker), tenkte jeg:
    RewriteEngine on
    RewriteBase /

    RewriteRule ^(.*)/musician.php?name=Herman+van+Vliet$ /?lang=$1&p=artists_detail&k=hermanvanvliet [R=301,L]

    men selv etter litt slossing får jeg det ikke til å fungere..
    har prøvd også med escaping ? og + etc, men ingen hell der heller.

    Merkelig nok (i mitt hode ihvertfall), så slår denne regelen inn ved nevnte URL:
    RewriteRule ^(.*)/musician.php$ /?lang=$1&p=artists [L]

    Og det forstår jeg ikke helt da "php$" skulle bety at det er slutten på teksten.
    Eller vent, regelen kjøres da vel altså på url'en uten query-string biten? Hm...

    Best hvis noen kunne bekrefte og fortelle hva jeg glemmer her ;)
    Hvordan får jeg tak i hele url'en?
     
  13. Pong

    Pong Jeg selger sʇɥƃıluʍop :)

    Innlegg:
    3.459
    Sløvinger! Dere sitter sikkert ute med en kald pils (hvis ikke: prøvd det - herligt!) :)
    OK, løste det med følgende condition foran:
    RewriteCond %{QUERY_STRING} ^name=Herman\+van\+Vliet$
     

Del denne siden