webForumDet fria alternativet

Enkla adresser vid databaspublicering

Webbutveckling

20 svar · 985 visningar · startad av K@llen

Medlem sedan mars 20032 667 inlägg
Frågan#1

Tjabba,

Jag hade ett liknande problem när jag bytte från html- till php-filer. Nu när jag bygger en ny sajt vill jag göra rätt direkt vad adresser avser.

Ponera att jag har ett artikelsystem. Adressen till en artikel kan då bli:

http://www.domain.se?article=231&cat=12

Artikeln ligger lagrad i en databas och hämtas direkt därifrån och presenteras för besökaren. Helst skulle man kanske vilja ha en edres som ser ut så här:

http://www.domain.se/article/12/231

eller nått. Hur få till bra och enkla adresser som inte binder mig till en filtyp. Jag har kikat lite på min tidigare lösning:

http://www.webforum.nu/showthread.php?s=&postid=1001052#post1001052

Hur bör jag utforma adressen på bästa sätt?

Medlem sedan nov. 20041 740 inlägg
#2

Har du stöd för mod_rewrite? Då kan du ju använda dig av det för att alltid peka till rätt filer, oavsett vilket programspråk du föredrar.

Använd det för att plocka variabler ur adressen. Detta innebär även att du kan lägga till variabler i adressen som egentligen inte påverkar själva innehållet, men som ger bättre placering i sökmotorerna.

example.org/12/231/sidans-titel

Medlem sedan mars 20032 667 inlägg
#3

Jo, den biten med mod_rewrite är jag med på. Men det blir ju en helsikes massa kataloger, eller är jag fel på det? Simulerar jag bara en fysisk adress?

Medlem sedan nov. 20041 740 inlägg
#4

Du behöver inga riktiga kataloger. Du säger helt enkelt bara till webbservern (med mod_rewrite) att alla sökvägar som börjar med /article/ ska skickas vidare till /visasida.php?kategori=12&sida=345

Jag använder ett sådant system för https://www.gastbok.nu Jag har nästan 30 000 gästböcker, men allt körs från ett enda script i en katalog. Det hade blivit svårt att hålla reda på alla kataloger annars.

Medlem sedan mars 20032 667 inlägg
#5

Kan hända jag är en smula trög nu. Men skickar jag vidare till /visasida.php?kategori=12&sida=345 då visas väl den adressen i adressraden? Eller tänker jag tokigt? Missar jag något viktigt i sammanhanget?

Medlem sedan nov. 20041 740 inlägg
#6

Nej, det var lite slarvigt uttryckt av mig. Vidarebefordringen sker internt, och syns aldrig för besökaren.

Din .htaccess skulle kunna se ut såhär:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^artikel/(.*)$ /artikel.php?querystring=$1 [L]

Säg att anropet ser ut så här:

example.org/artikel/12/345

Då laddar vi filen
example.org/artikel.php?querystring=12/345

För besökaren syns fortfarande den översta adressen i fönstret.
Splitta sedan strängen med PHP.

$querystring = $_GET["querystring"];
$delar = explode("/", $querystring);

$kategori = $delar[0];
$artikel = $delar[1];
Medlem sedan juli 20013 378 inlägg
#7

Yep - mod-rewrite är praktiskt, och om man vill kan man meka vidare med reglerna för att täcka in flera parametrar utan att koda in något i applikationen - även om reglerna kan bli lite grötiga om man har speciella önskemål :)

Surfa till t.ex. http://xhtml.se/2005/04/ och du utlöser regeln

RewriteRule ^([0-9]{4})/([0-9]{1,2})/?$ /index.php?year=$1&monthnum=$2 [QSA,L]

- dvs parametrarna splittas i regeln så att fyra siffor följt av en "/" och sedan en eller två siffror till, och den första siffergruppen (mellan det första parentesparet i uttrycket) kopplas via $1, det andra via $2 ...

:birp

Medlem sedan nov. 20041 740 inlägg
#8

jarvklo skrev:

PS - example.org/artikel/12/345 bör det väl vara i föregående exempel ?

Det känns bra att jag hann se felet själv innan du påpekade det.

Medlem sedan juli 20013 378 inlägg
#9

Hihi... Du var så snabb att du t.o.m. hann kommentera komentaren under de ca 20 sekunder den låg ute innan jag såg att du ändrat och redigerade bort den :bire

Medlem sedan mars 20032 667 inlägg
#10

Gaaah, nu börjar det bli meckigt. Ännu en anledning att lära sig Reguljära uttryck. Något som jag hela tiden föser framåt i tiden. :(

Tack grabbar, jag ska pula med det jag fått hittills. Får säker anledning att återkomma i tråden när problem (garanterat) uppstår. :D

Medlem sedan apr. 20041 597 inlägg
#11

Gislaved skrev:

Säg att anropet ser ut så här:

example.org/artikel/12/345

Är poängen med detta sätt att göra sökvägen oberoende av vilket programspråk man använder sig av? Eller finns det flera fördelar gentemot det traditionella sättet http://www.domain.se/?article=231&cat=12?

Medlem sedan nov. 20041 740 inlägg
#12

Poängerna kan vara flera. Dels kan det, som du nämner, vara fördelaktigt att behålla adresser även om du byter programspråk. Dels kan det innebära att sökmotorerna får det lättare att hitta på din sida. Script kiddies kanske undviker att leta hål på din sida om det är krångligt att se vilket programspråk du använder.

Sen tycker jag dessutom att det är snyggare.

Medlem sedan juni 2004533 inlägg
#13

Här är lite bra läsning om hur man väljer sina adresser:
http://www.w3.org/Provider/Style/URI

Medlem sedan jan. 20023 327 inlägg
#14

Finns det någon bra sida där man kan läsa mer om mod_rewrite? Gärna tutorial :)

Medlem sedan nov. 2003196 inlägg
#15

Compusa skrev:

Finns det någon bra sida där man kan läsa mer om mod_rewrite? Gärna tutorial :)

Behöver också en guide, steg för steg. Fattar inte varför jag aldrig förstår hur jag gör detta.

Gör man allt i .htaccess filen????

Medlem sedan nov. 2003196 inlägg
#16

då är det 59 minuter kvar för att hjälpa mig lite innan den omtalade uppgraderingen...

Medlem sedan nov. 20041 740 inlägg
#17

SONICdust skrev:

Compusa skrev:

Finns det någon bra sida där man kan läsa mer om mod_rewrite? Gärna tutorial :)

Behöver också en guide, steg för steg. Fattar inte varför jag aldrig förstår hur jag gör detta.

Gör man allt i .htaccess filen????

Det mesta görs i .htaccess-filen. Ofta gör du en enkel vidarebefordran till rätt script, och behandlar sedan informationen på rätt sätt.

Medlem sedan juli 20041 183 inlägg
#18

Rätta mig om jag har fel med detta gäller väl bara på Apaches webbserver?

Eller kan man göra sånt här på IIS också??

Medlem sedan nov. 2003196 inlägg
#19

Gislaved skrev:

Det mesta görs i .htaccess-filen. Ofta gör du en enkel vidarebefordran till rätt script, och behandlar sedan informationen på rätt sätt.

Är extra tög då det är söndag kväll... kan du inte visa lite kod exempel på det du menar så kanske jag hänger med...

Medlem sedan juli 2002252 inlägg
#20

lilja skrev:

Rätta mig om jag har fel med detta gäller väl bara på Apaches webbserver?

Eller kan man göra sånt här på IIS också??

Du kan göra det i IIS genom att mappa olika filtillägg till olika program. Om du t ex. mappar filtillägget ".htm" till c:\windows\microsoft.net\framework\v2.0.50215\aspnet_isapi.dll (ASP.NET) så kan du programmera .NET i vanliga .htm sidor. Samma gäller med t ex .gif bilder så att .NET kan hantera dessa och t ex streama ut https://www.mindoman.se/bild.gif från en SQL databas.. :)

Finns många möjligheter, bygger ett CMS system i .NET som använder sig av virtuella .htm sidor som genereras från databas. På så sätt kan jag få https://www.mindoman.se/minkatalog/minfil.htm att vara helt dynamisk men ändå se statisk ut så att besökare enkelt kommer ihåg adressen samt (nog viktigast!) att sökmotorer kan indexera mina sidor på ett optimalt sätt.

269 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)