webForumDet fria alternativet

Hjälp med sökmotorvänlig URL

ASP

16 svar · 844 visningar · startad av Asa

Medlem sedan dec. 20011 860 inlägg
Frågan#1

Kan någon hjälpa mig med detta för min Gruvsjo.com? Ge mig tips på hur jag skall göra allt detta.. Skulle bli mycket tacksam för det isåfall.

Istället för att använda följande länk till en artikel:
http://www.gruvsjo.com/artikel.asp?pid=1&artID=81

Vill jag det skall stå så här:
http://www.gruvsjo.com/artiklar/namn_pa_artikel

Jag måste använda mig av 404 felsidor för jag har ej tillgång till ISAPI-filter

Medlem sedan juni 20008 205 inlägg
#2

En variant är att använda http://www.gruvsjo.com/artikel.asp/namn_pa_artikel och sen plocka from allt efter filnamnet med Request.ServerVariables("PATH_INFO").

Medlem sedan juni 20014 421 inlägg
#3

Hmm,
Det är faktiskt hyffsat enkelt. Du börjar med att skapa en 404.asp som får ta hand om alla requests.
Sidan som du frågade efter skickas med i Request.ServerVariables("QUERY_STRING")
Du kan ta det värdet, leta reda på alla slashar, ta värden som finns efter din domän.tld.

Därefter har du en funktion som kollar av vilken "undermapp" du vill åt och skickar dig vidare till en funktion för den "undermappen". Tänkte du bara använda artiklar som undermapp blir det enklare. Då tar du bara det sista värdet som skickad med och gör en sql-fråga till databasen efter artikelnamnet, plockar ut pid och artID från databasen, lagrar dem i sessioner.

Därefter kan du köra en server.transfer("artikel.asp")
Och därifrån hämtar du ut pid och artid från sessionen istället för en querystring.

För att skriva ut SEF-länkar kan du ju göra en funktion som du kallar på typ:

<a href="<%=SEFUrl(1,81)%>">

Där SEFUrl kör en sql-sats där den hämtar artikel namnet baserat på idt du skickade med och skickar tillbaka typ: "artiklar/"&namn_pa_artikel

i samma funktion kan du ju se till att göra en replace på å ä och ö till aa, ae och oe. Då google ser dessa som åäö...

Det vore bra om du kunde skicka ett http 200 också för okej..men jag är tveksam om det går.

Medlem sedan dec. 19996 721 inlägg
#4

colione skrev:

Det vore bra om du kunde skicka ett http 200 också för okej..men jag är tveksam om det går.

Det går utmärkt, och är i det närmaste ett krav för att uppnå sökmotorvänlighet.

Response.Status = "200 OK"
Medlem sedan juni 20014 421 inlägg
#5

Jo, men jag tänkte att huvudet redan var skickat iom att den går till en 404 sida först.

Medlem sedan dec. 20011 860 inlägg
#6

Men hur skall man göra. Jag vet inte alls hur man gör. skall jag länka om till mina kurser och annat på helt annat sätt eller hur gör man. Alla som länkar mig vet ju att det ligger under ex: artikel.asp?pid=1&aID=1

VIll nån hjälpa mig med detta så jag får igång det. Betalning självklart om det blir för mycket jobb.

Medlem sedan juni 20014 421 inlägg
#7

Hmm, du kan ju kolla om du får en querystring medskickad till artikel.asp men sessionerna med artid och pid inte är definierade. Om du får en querystring så gör du en fråga baserat på detta och hämtar ut artikel-namnet ur databasen och skickar en redirect till /artiklar/artikeln_namn där sedan 404-sidan gör det som jag skrev i min post ovan.

Om vi vänder på frågan. Hur tror du att du skall börja?

Medlem sedan dec. 20011 860 inlägg
#8

Skall testa göra dessa redirects och 404 felsidan till en början. Jag återkommer till denna tråden hur det går.

Medlem sedan dec. 20011 860 inlägg
#9

Men kan jag använda följande?

request.QueryString("pid")
och
request.QueryString("artID")

pid är alltid med. Kan jag hämta ut det så istället med det du skrev ovan?

Medlem sedan dec. 20011 860 inlägg
#10

Weee:
http://www.gruvsjo.com/artiklar/Barnsaekra-ditt-hem

Kolla

Så här gjorde jag i min testfil transfer.asp:

<!--#Include file="Include/settings.asp"-->
<!--#Include file="Include/function.asp"-->
<!--#Include file="Include/db.asp"-->

<%
Session("pid")      = request.QueryString("pid")
Session("artID")    = request.QueryString("artID")
Session("scriptID") = request.QueryString("scriptID")

Function ReplaceText(strValue)
	strValue = Replace(strValue," ","-")
	strValue = Replace(strValue,"å","aa")
	strValue = Replace(strValue,"ä","ae")
	strValue = Replace(strValue,"ö","oe")
	ReplaceText = strValue
End Function

If Session("artID") <> "" then
	Set RS=Conn.Execute("Select rubrik From gruvsjo_artiklar Where verify=1 and artID=" & FixSQL(Session("artID")))
		If Not RS.EOF Then
			strRub = ReplaceText(RS(0))
		Else
			strRub = "Error"
		ENd If
	RS.Close:Set RS=Nothing
End If

Response.redirect "/artiklar/" & strRub
%>

i 404.asp skickar jag till testfilen open.asp som är orginalfilen fast där hämtar jag ut via Session("pid") och Session("artID")

Är det rätt? Måste nog ha med ID i länken för att kunna hämta ut det på en gång via att skriva URLén eller?

Hittar google detta sen på nå vis?

Medlem sedan juni 20014 421 inlägg
#11
Response Headers - [url]http://www.gruvsjo.com/artiklar/Barnsaekra-ditt-hem[/url]

Date: Fri, 09 Feb 2007 19:33:33 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Content-Length: 11138
Content-Type: text/html
Cache-Control: private

200 OK

är huvudet jag får..ser korrekt ut

Medlem sedan juni 20014 421 inlägg
#12

Asa skrev:

Men kan jag använda följande?

request.QueryString("pid")
och
request.QueryString("artID")

pid är alltid med. Kan jag hämta ut det så istället med det du skrev ovan?

Vart skall du skicka med dessa?

Du kommer inte in i artikeln barnsaekra-ditt-hem dock.

kom ihåg att du måste kasta tillbaka ae -> ä när du hämtar om det står med ä i databasen.

Medlem sedan dec. 20011 860 inlägg
#13

Okej, då är jag på rätt väg då :) Men måste nog ha pid och artID med i länken för att hitta artikeln. Var kollar du det där som du kollade ovan?

Medlem sedan juni 20014 421 inlägg
#14

När var och hur skickar du med dessa värden? Du kan ju nämigen inte skicka med dem när du gör en server.transfer. Därför du ska sätta sessioner.

Skriver längre sen..ska på bio med flickvännen nu.

Huvud informationen plockade jag med hjälp av developer toolbar i forefox via: Information -> View Response Headers

Medlem sedan dec. 20011 860 inlägg
#15

Okej, tackar. Vi hörs förmodligen senare. Tack för allt. Men om man skriver in via denna på en gång då?

http://www.gruvsjo.com/artiklar/5/87/Barnsaekra-ditt-hem

Hur skall det då stå i 404.asp? Just nu har jag bara en detta:
<%
server.transfer("/open.asp")
%>

Medlem sedan juni 20014 421 inlägg
#16

Det är en lösning också, jag brukar dock vilja dölja idn så mycket som möjligt för slutanvändaren.

Men om vi gör på ditt sätt hade jag valt att låta 404.asp (den man träffar vid ex. gruvsjo.com/artiklar/artikel_namn/pID/artID):

  • Fårga efter: Request.ServerVariables("QUERY_STRING")
  • Parsea variabeln i vilken du har sparat query-stringen efter vilken "undermapp " (web, artiklar, script), samt vilka pID och artID du har. Då kan du skippa tt bry dig om vilket artikelnamn som skickas med.
  • Du skickar dem till olika funktioner baserat på vilken undermapp du får. Gör en databas-fråga på pID och artID, plocka ut det nödvändiga och presentera det. Alternativt så plockar du ut pID och det andra idt från databasen, lägger det i sessioner och gör en server transfer till t.ex artiklar.asp eller script.asp

För att få bakåt- kompabilitet kan du låta ex vis web.asp göra följande:

databas-fråga efter titeln.

Response.Status="301 Moved Permanently"
Response.AddHeader "Location", "http://www.grovsjo.com/web/"&titel_fråndatabas&"/"&pID&"/"&kursID

Genom att ha dem sist så vet du ju snabbt vad som ska hämtas, skickas det bara med en slash med nummer vet du att du är ute efter en pID osv.

Medlem sedan dec. 20011 860 inlägg
#17

Tackar så mycket allesammans :)

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