Hvordan bruke mod rewrite i .htaccess

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009

Jeg vil lære å omskrive noen URLer med Apaches Mod Rewrite ved hjelp av .htaccess.

Når jeg går inn på domenet mitt, f.eks. domene.com så får jeg opp "index.php" som er hoveddokumentet. Hvis jeg går inn på domene.com/index.php så kommer også forsiden opp.

Det jeg ønsker å gjøre er at de som går til domene.com/index.php blir videresendt til domene.com. Hvordan gjør jeg dette ved hjelp av mod rewrite?

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Mod rewrite i .htaccess

For å gjøre dette bruker man såkalt 301 redirect. Hva er 301 redirect? Et 301 redirect (Permanently Moved) betyr at dokumentet er flyttet permanent. Det man forteller ved å bruke denne omdirigeringen er at dokumentet man dirigerer fra er flyttet til dokumentet man dirigerer til.

Omdirigering av index til rotkatalog

  • domene.com (dokument #1)
  • domene.com/index.php (dokument #2)

Hadde man brukt HTML, kunne selvsagt filetternavnet vært htm eller html. Det samme gjelder for ASP, CGI og så videre. I eksemplet nedenfor må du derfor endre omskrivingen av URLene til å passe den strukturen du bruker. I eksemplet bruker vi "ext", forkortelse av extension for filetternavn.

En av grunnene til at vi ønsker å omdirigere index.php til roten, er av hensyn til søkemotoroptimalisering. Hvis samme side serveres fra to forskjellige URLer, så vil man miste link juice og autoritet på begge to.

Omdirigering av www til ikke-www og ikke-www til www

Velg om du skal bruke www eller ikke-www først. Altså om websiden din skal være på www.domene.com eller bare domene.com uten www.

Etter valget er tatt må man skrive en omdirigering av www til ikke-www, dvs. fra domene.com til www.domene.com eller motsatt: Fra www.domene.com til domene.com, bør også gjøres med en 301 redirect.

I eksemplet nedenfor er både omdirigering fra ikke-www til www og fra www til ikke-www tatt med, men kommentert ut ved hjelp av #. Fjern nummertegnet foran den løsningen du velger, og fjern den du ikke skal bruke.

Rewrite i .htaccess

Bytt ut tld med ditt top level domain, f.eks. com, net, org, no el.l. Bytt også ut ext med php, htm, html eller hva du enn måtte bruke. Følg kommenteringen for å være sikker på at alt blir riktig, og ta gjerne en backup av din eksisterende .htaccess-fil før du legger inn dette.

# Sjekker om mod rewrite er installert paa webserveren
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /

  # Skriver om fra domene.tld til www.domene.tld
  # RewriteCond %{HTTP_HOST} ^domene\.tld$ [NC]
  # RewriteRule ^(.*)$ http://www.domene.tld/$1 [L,R=301]

  # Skriver om fra www.domene.tld til domene.tld
  # RewriteCond %{HTTP_HOST} ^www\.domene\.tld$ [NC]
  # RewriteRule ^(.*)$ http://domene.tld/$1 [L,R=301]

  # Skriver om fra index.ext (ext kan være php, html ...)
  # til uten index.ext, HUSK aa fjerne www hvis du ikke bruker www
  RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.ext\ HTTP/
  RewriteRule ^index\.ext$ http://www.domene.tld/ [R=301,L]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>
ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
Min .htaccess

Dette står i min .htaccess akkurat nå: må jeg fjerne dette?

RewriteEngine on
RewriteCond %{HTTP_HOST} ^ekbedriften.no$
RewriteRule ^/?$ "http\:\/\/www\.ekbedriften\.no" [R=301,L]

Har gjort noe her nå... men vet ikke om det ble riktig da. Virker som du kan se slike ting, så kansje du kan sjekke igjen for meg?

Har kun benyttet fra domene.no -> www.domene.no. Den mottsatte veien klippet jeg ut. Var det riktig?

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
.htaccess

Fjern det der og erstatt det med mitt skribleri ovenfor, fjern kommentering (#) foran det valget du går for (www eller ikke-www) og følg anvisningene i kommentarene.

Hvis du har gjort det riktig og velger www.domene.com, så skal alle disse adressene sendes til den:

  • domene.com
  • domene.com/index.php
  • www.domene.com/index.php

Det skjer ikke nå, ergo har du ikke gjort det korrekt.

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
Forsøkte, men ser ikke ut til

Forsøkte, men ser ikke ut til at jeg fikk det riktig...

# Sjekker om mod rewrite er installert paa webserveren
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /
  # Skriver om fra domene.tld til www.domene.tld
  RewriteCond %{HTTP_HOST} ^ekbedriften\.no$ [NC]
  RewriteRule ^(.*)$ http://www.ekbedriften.no/$1 [L,R=301]

  # Skriver om fra index.ext (ext kan være php, html ...)
  # til uten index.ext, HUSK aa fjerne www hvis du ikke bruker www
  RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
  RewriteRule ^index\.php$ http://www.ekbedriften.no/ [R=301,L]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Plasser dette i .htaccess

Virker dette:

# Sjekker om mod rewrite er installert paa webserveren
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /

  # Skriver om fra domene.tld til www.domene.tld
  RewriteCond %{HTTP_HOST} ^ekbedriften\.no$ [NC]
  RewriteRule ^(.*)$ http://www.ekbedriften.no/$1 [L,R=301]

  # Skriver om fra index.php til rot
  RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
  RewriteRule ^index\.php$ http://www.ekbedriften.no/ [R=301,L]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]
</IfModule>
ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
ser ikke slik ut... fila

ser ikke slik ut... fila ligger i public_html

Webområdet mitt ligger i en egen mappe igjen... Men det skal vel ikke ha noe å si?

Jeg har også brukt bluehost sin egen redirect tidligere da, i forbindelse med ekbedriften.com -> ekbedriften.no samt fra uten www -> www

har det noe å si?

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Du skal kun bruke redirecten

Du skal kun bruke redirecten jeg skrev, intet annet, og du skal ha .htaccess i rotkatalogen.

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
desverre, men jeg får det

desverre, men jeg får det ikke til jeg... Nå har jeg tatt bort all redirect. Og har lagt .htaccess i rotmappa til selve nettstedet. Der hvor index.php ligger.

Nå redirecter den ikke fra .com -> .no lenger heller da:(.

Kan trygt si at det er noe som ikke helt stemmer...

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Webrot og modifisert htaccess

Har du den gamle .htaccess-filen din enda? Hvis ja, legg den til her som filvedlegg.

Tror jeg forstår hvordan du har satt opp dette nå. ekbedriften.no ligger egentlig i katalogen "ekenorway", sant? I såfall er det der du skal plassere den, det er jo det som er rotkatalogen for det domenet (hvert domene har jo sin rotkatalog. Når du går på domene.com, så får du jo opp index.php fordi index.php ligger i roten.).

Legger ved en modifisert .htaccess, denne vil ikke dirigere .com til .no, men skal gjøre som beskrevet ovenfor. Merk at den heter "htaccess.txt", så du må rename den til ".htaccess" når du laster den opp.

VedleggStørrelse
htaccess.txt 572 byte
ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
har ingen andre htaccess

har ingen andre htaccess filer enn den fra deg atm.

 

Med det er riktig det du ser der, at siden ligger i en mappe ("ekenorway")... Det er også her .htaccess fila ligger.

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
.htaccess

Har du lastet opp den filen jeg sendte deg? I såfall, hva skjedde? Jeg har jo selv webhotell fra Bluehost, og dette er ikke noe problem.

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
bruker filen fra deg...når

bruker filen fra deg...

når jeg skriver inn uten www eller med index.php så skjer det ikke noe... redericter ikke altså...

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Kan du lage en FTP login til

Kan du lage en FTP login til meg og sende den via kontaktskjemaet. Da skal jeg se hva dette er for noe, for jeg har mine mistanker om at du gjør noe feil.

Det er jo veldig merkelig at det fungerer for meg, men ikke for deg.

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
mener jeg fikk sendt deg noe

mener jeg fikk sendt deg noe innloggingsgreier... funket det?

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Skal fungere nå

Ja, jeg mottok dem og jeg har tuklet litt. Slettet din fil og lastet opp min egen, og alt fungerer nå.

Aner ikke hva grunnen var.

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
javel, men, så du noen

javel, men, så du noen forskjell da? på filene da?

EDIT: Og, nå når jeg tok vekk den gamle fila, så redirectes ikke brukeren når de skriver .com til .no.

Hvordan får jeg gjennopprettet det uten å herpe den du har lagt opp?

Risikerer jeg å overskrive den .htaccess fila om jeg går inn i bluehost sin redirect og setter opp funksjonen der?

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Omdirigere .com til .no med .htaccess

Ingen forskjell på reglene som omdirigerer, men kanskje grunnen var at det var æøå i kommentarene på filen ovenfor. (Har fjernet de bokstavene nå). Jeg skriver somregel alltid engelske kommentarer, også for meg selv, men brukte norsk her fordi det er mer brukervennlig.

Opprett en ny .htaccess som du skal legge i roten på .com-domenet - altså ikke webroten til .no-domenet. I den legger du inn:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteBase /

  RewriteCond %{HTTP_HOST} ^ekbedriften\.com$ [NC]
  RewriteRule ^(.*)$ http://www.ekbedriften.no/$1 [L,R=301]

  RewriteCond %{HTTP_HOST} ^www\.ekbedriften\.com$ [NC]
  RewriteRule ^(.*)$ http://www.ekbedriften.no/$1 [L,R=301]
</IfModule>
ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
det fungerte med en gang

det fungerte med en gang da;)

Hehee... jammen ikke bare bare når det er så "pirkete" på en måte...

 

med hilsen
Thomas Kile

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Flott at det fungerte

Flotters! Nei, modifisering av webserveren via diverse moduler i Apache er sannelig ikke bare bare. Man kan gjøre mye nyttig i .htaccess.

Personlig synes jeg særlig det er regular expressions som kan være trøblete. Men ufattelig nyttige, det er de. Man kan jo bruke dem i PHP også, noe jeg ofte gjør.

Uansett; da lærte jeg at man ikke skal putte æøå i kommentarer i .htaccess-filene. :)

PS: Husk å slette FTP-kontoen du laget til meg.

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
mhm, skal gjøre det... mange

mhm, skal gjøre det... mange takk hvertfall... helt fantastisk...

med hilsen
Thomas Kile

ThomasK
ThomasKs bilde
Avlogget
Donator
Ble med: 30.12.2009
hvordan videreskriver jeg til

hvordan videreskriver jeg til ?gdc=velkommen ?

Forsøkte meg litt, men fikk bare error 500...

 

Grunnen til at jeg vil gjøre det, er pga. at jeg har <title> og meta-tags i databasen. og kjører en spørring baert på URL for å hente ut riktig tags.

Og når jeg ikke gjør det, får jeg feilmelding.

 

Eller, hvrdan får jeg hentet ut til forsiden (index)?

med hilsen
Thomas Kile

Svar på forumemnet

(If you're a human, don't change the following field)
Your first name.
Innholdet i dette feltet blir holdt privat og vil ikke bli vist offentlig.