Kjapp og trygg hosting for Wordpress

Rewrite av dynamisk url

Mr Vest

Sjefen over alle sjefer!
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?
 
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.
 
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.
 

Mr Vest

Sjefen over alle sjefer!
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. :)
 
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:
modrewrite.png



Ligger den der så er resten plankekjøring =)
 
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.
 

Mr Vest

Sjefen over alle sjefer!
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...

RewriteEngine on
RewriteRule ^([a-zA-Z0-9]*)/$ index.php?do=$1

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... :)
 
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.
 
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:

Mr Vest

Sjefen over alle sjefer!
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!
 

Pong

Jeg selger sʇɥƃıluʍop :)
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?
 
Topp