Avatar billede Mik2000 Professor
25. april 2010 - 01:54 Der er 9 kommentarer og
1 løsning

mod_rewrite omskiv til seo venlig adresse

Hej

Jeg har kigget på nogle artikler der kan skrive f.eks. denne url:
www.noget.dk/side.php?produkt=12&model=asvc
om til
www.noget.dk/side/12/asvc/

Det er smart, men kan man få den til at samarbejde med PHP, således at man kan hente produktnavnet fra databasen og få vist det i stedet for 12, så den bliver f.eks.:
www.noget.dk/side/Flot%20fuglehus/asvc/

-----------------------------------------------

En anden ting......
Hvis folk nu kopiere url'en:
www.noget.dk/side/Flot%20fuglehus/asvc/
vil de så kunne sætte den ind i en browser og alligevel se siden eller skal der noget andet kode til også, for at den kan finde ud af "den i virkeligheden" skal vise www.noget.dk/side.php?produkt=12&model=asvc

-----------------------------------------------

Håber I forstår srpøgsmålene, ellers skriv blot. Ser frem til jeres svar :)
Avatar billede Slettet bruger
25. april 2010 - 01:58 #1
Til dit andet spørgsmål kan man sagtens sætte den ind i browseren uden problemer.. Angående dit script, vil jeg lige gå ind i mit arkiv og finde det. :b
Avatar billede Slettet bruger
25. april 2010 - 02:05 #2
Din .htaccess bør se sådan ud:


Options +FollowSymLinks
RewriteEngine on
RewriteRule /(.*)/(.*)\/ side.php?produkt=$1&model=$2

URL: http://noget.dk/(MAPPEN .HTACCESS LIGGER I)/12/asvc

Jeg er ikke sikker på om den virker, så du må gerne lige teste det før du acceptere denne som løsning.
Avatar billede Slettet bruger
25. april 2010 - 02:18 #3
For at kunne lave url adresser som www.noget.dk/side/Flot%20fuglehus/asvc/ er det vigtigt du har sørget for at din database-struktur er sat ordentligt op, da der f.eks. ikke må være 2 ting i din database der hedder "Flot Fuglehus"
Derudover er det lige så vigtigt for SEO-venlige url´s at dine PHP koder er sat op til det! mod_rewrite-delen sørger kun for at klienten bliver smidt hen på side.php hvis den ikke kan finde /side/flot%20fuglehus/ascv/

Et eksempel der sender brugeren til index.php hvis den angivne url ikke findes på serveren, kunne se således ud!

mod_rewrite-delen (typisk i .htaccess):
# Slår Rewrite Engine til
RewriteEngine on

# Rewrite kun hvis den angivne url ikke findes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

# Laver rewrite reglen
RewriteRule ^(.*)$ index.php

index.php
<?php
// Henter url-adressen
$url = $_SERVER["REQUEST_URI"]; # /side/flot%20fuglehus/ascv/

// Opdeler url'en ved hver skråstreg (/)
/*
$parts[0] = %empty%
$parts[1] = "side"
$parts[2] = "flot fuglehus"
$parts[3] = "asvc"
*/
$parts = explode("/", $url);

// Og nu bestemmer vi så hvad der skal ske!
if(file_exists($parts[1].".php")) {
  require_once($parts[1].".php");
} else {
  // Kunne ikke finde undersiden 'side'!
  echo "Kunne ikke finde undersiden '" . $parts[1] . "'!";
  exit;
}
?>

side.php
<?php
// Du kigger lige nu på 'flot fuglehus'!
echo "Du kigger lige nu på '" . urldecode($parts[2]) . "'!";
?>


Håber det gir mening :-)
Avatar billede Slettet bruger
25. april 2010 - 02:20 #4
Hov så lige @RoboForm har postet imens jeg skrev min kommentar.
Du kan også bruge @RoboForm´s kode, men så skal du ind og indsætte en RewriteRule for alle sider der skal have seo-venlige urls.
Avatar billede Mik2000 Professor
25. april 2010 - 15:27 #5
Okay .... ja det går nok ikke :) Der er mange sider

Men jeg skal lige høre om noget, for på nuværende tidspunkt går links jo til f.eks. www.noget.dk/side.php?produkt=12&model=asvc

Så med det eksempel, skal man så vide jeg forstår, ind og lave eksisterende links om til www.noget.dk/side/Flot%20fuglehus/asvc/

Er det korrekt?
... og når man så skriver
www.noget.dk/side/Flot%20fuglehus/asvc/

så forbliver denne adresse i adresselinjen, men den viser i virkeligheden siden: www.noget.dk/side.php?produkt=12&model=asvc således at alle get ting mv stadig virker
Er det også korrekt forstået?

------------------------------------------

Der findes ikke en måde man kan gøre det lidt omvendt, således at man forsat linker til
www.noget.dk/side.php?produkt=12&model=asvc
... men hver gang den ser denne adresse, så viser den i stedet
www.noget.dk/side/Flot%20fuglehus/asvc/
(fordi man så laver et kald til databasen, og viser det produkt med id 12)

Således at det hele fungerer som nu og man stadig bruger id til at identificerer den unike, men således at man bare får den til at vise en anden url af hensyn til søgemaskinerne - eller hjælper det ikke mht. dem?
Avatar billede Slettet bruger
25. april 2010 - 18:18 #6
Normalt så bruger man den metode jeg gav eksempel på eller den som @RoboForm kom med i #2 og så laver man selv sine links "url venlige", derved kan du skræddersyge dem som du har lyst til.
Hvis du gerne vil blive ved med at bruge de links du har nu, så kan du selvfølgelig godt lave en rewrite-kode der gør det du vil have, men det er ikke noget jeg selv ville gøre brug af.

Som jeg ser det lige, så bliver du nød til at lave en omdirigering af hver side, så når du går ind på http://ditdomain.dk/side.php?produkt=12&model=asvc så bliver du sendt over til http://dandomain.dk/side/produkt/12/model/asvc/ (husk på at mod_rewrite ikke ved hvad produkt 12 er, så derfor kan den ikke skrive "Flot Fuglehus" for dig!).
Når man så er sendt over til den nye adresse, skal dit mod_rewrite sørge for at URI'en bliver givet til en php side, f.eks. index.php, via GET.
Altså http://dandomain.dk/side/produkt/12/model/asvc/ skal blive til http://dandomain.dk/index.php?modul=side&produkt=12&model=asvc

Derfra kan du så hente Modul (side), Produkt (12) og Model (asvc) ned i din index.php via $_GET.

Plusserne for ovenstående er følgende:
- Kan ikke komme på nogen desværre

Minusserne er følgende:
- Dine URL´s er stadig ikke SEO venlige!
- For hvert link man trykker på vil man blive sendt videre til en ny side - ikke særlig optimalt
- De url´s du bliver sendt til er stadig ikke særlig pæne.

Så derfor vil jeg råde dig til at omskrive dine url´s selv og bruge enten mit eller @RoboForm´s eksempel.
Avatar billede Mik2000 Professor
26. april 2010 - 00:37 #7
Hej

Okay, tak fo hjælpen :)
Jeg prøver med din, da jeg ikke kan gøre det med alle sider :)

Så smid et svar og så er der point. Også tak til dig Robofarm for dine svar :)
Avatar billede Slettet bruger
26. april 2010 - 10:00 #8
Det var da så lidt :-) her får du et svar.
Avatar billede Slettet bruger
26. april 2010 - 17:19 #9
@mik2000, læs lige mit navn én gang til ;)

Jeg hedder RoboForm og ikke Robofarm
Avatar billede Mik2000 Professor
02. maj 2010 - 01:58 #10
Hermed point

RoboForm..... det gik vist for hurtigt ;)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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