Avatar billede moejensen Nybegynder
07. juli 2003 - 12:41 Der er 13 kommentarer og
1 løsning

skjul grimme links i adressebaren

Jeg er ved at lave en ny side, hvor jeg gør brug af ghost folders, således at linksne ser således ud:

www.siden.dk/menulink/sidelink/

mapperne bliver så oversat af 404.asp til følgende sti:

www.siden.dk/default.asp?menu=menulink&side=sidelink

problemet er bare at jeg gerne ville have :
www.siden.dk/menulink/sidelink/
stående i adressebaren frem for:
www.siden.dk/default.asp?menu=menulink&side=sidelink

lige som ger på eksperten. Nogle ideer?
Avatar billede di8leva Nybegynder
07. juli 2003 - 12:43 #1
lytter
Avatar billede moejensen Nybegynder
07. juli 2003 - 12:47 #2
-> di8leva hvis du også vil vide hvordan man laver denne struktur, så se dette spg: http://www.eksperten.dk/spm/373201

jeg fik efterfølgende hjælp til at lave en decikering af url'en. se spg her:

http://www.eksperten.dk/spm/373340
Avatar billede nielle Nybegynder
07. juli 2003 - 18:00 #3
===== 404.asp =====

<%
Option Explicit
Dim GhostFolder

GhostFolder = Request.ServerVariables("QUERY_STRING")

Pos = InStrRev(GhostFolder, "/")
sidelink = Right(GhostFolder, Len(GhostFolder)-Pos)

GhostFolder = Left(GhostFolder, Pos-1)

Pos = InStrRev(GhostFolder, "/")
menulink = Right(GhostFolder, Len(GhostFolder)-Pos)

Session("menulink") = menulink
Session("sidelink") = sidelink

if menulink<>"" and sidelink<>"" then
  Server.Transfer("default.asp")  ' Fortsæt med at køre default.asp, men behold URL'et i adresselinjen
else
  ' Udskriv den normale 404 besked
end if
%>

===== default.asp =====

<%
' Led først efter menulink og sidelink som sessions-variable, og hvis de ikke er der så hent dem via QueryString.

menulink = Session("")
if menulink="" then
  menulink = Request.QueryString("menulink")
end if

sidelink = Session("sidelink")
if sidelink="" then
  sidelink = Request.QueryString("sidelink")
end if

' Resten af din kode
%>
Avatar billede nielle Nybegynder
07. juli 2003 - 18:01 #4
Rettelse:
menulink = Session("menulink")
Avatar billede nielle Nybegynder
07. juli 2003 - 18:09 #5
Desværre kan man ikke bruge:

Server.Transfer("default.asp?menulink=" & menulink & "&sidelink=" & sidelink)

- hvilket ellers havde været pænere. Derfor bliver man nødt til at overføre vaiablene som sessions-variable.
Avatar billede moejensen Nybegynder
07. juli 2003 - 21:47 #6
jeg har lavet lidt om på det da det du skrev ikke helt virkede, men jeg har fået et meget trals problem. Jeg indsætter først lige min kode:

========= 404.asp =========

<%
    strQS = Request.ServerVariables("QUERY_STRING")
    If str > "" Then
        If right(strQS,11) = "default.asp" Then
          StrQS = Left(strQS, Len(strQS) - 11)
        End If
       
        If right(strQS,1) = "/" then
            StrQS = Left(strQS, Len(strQS) - 1)
        End If
       
        Sidelink = Right(strQS,Len(strQS) - InStrRev(strQS,"/"))
        strQS = Right(strQS, len(strQS) - 11)
        pos1 = instr(strQS,"/")
        pos2 = instr(pos1+1,strQS,"/")
       
        If pos2 = 0 Then
            Menulink = sidelink
            Sidelink = ""
        Else
            Menulink = Mid(strQS, pos1+1, pos2-pos1 - 1)
        End if
    End if

    session("strMenu") = Menulink
    session("strSite") = Sitelink
    Server.Transfer("default.asp")
%>

============= default.asp =============

<%
session("language") = "dk"

strMenu = Session("menulink")
if strMenu="" then
  strMenu = "XXX"
end if

strSite = Session("sidelink")
if sidelink="" then
  strSite = "XXX"
end if
%>

Det virker fint når linket hedder ex

www.siden.dk/menulink

men hvis siden hedder:

www.siden.dk/menulink/

så kommer den godt nok tilbage til siden, men den kan ikke finde min css fil og billederne, det er som om den tror den står i en forkert mappe. Jeg akn bare ikke finde en løsning.
Avatar billede nielle Nybegynder
07. juli 2003 - 22:34 #7
Tja, efter din:

If right(strQS,1) = "/" then
  StrQS = Left(strQS, Len(strQS) - 1)
End If

- så burde der jo ikke være forskel på opførelsen i de to tilfælde. Forklaringen kan måske findes i den måde webserveren reagere når den ser et "/" til sidst i en sti - den leder efter en default.??? (eller index.??? alt efter opsætningen). Det gør den ikke hvis der ikke er noget /.

Jeg går ud fra at du har prøvet at udskrive værdien af Request.ServerVariables("QUERY_STRING") sådan at du kan se at den virkelig indeholder det du forventer?

Det eneste bud på en løsning jeg kan komme med, er at du angiver en absolut sti for dit CSS eller at du indlejre det direkte i siden i stedet for som en ekstern css-fil.
Avatar billede nielle Nybegynder
07. juli 2003 - 22:37 #8
Du kan vist også sætte webserveren op til at www.siden.dk/menulink/ automatisk bliver redirectet til www.siden.dk/menulink
Avatar billede nielle Nybegynder
07. juli 2003 - 22:41 #9
Du kan jo f.eks. starte din 404.asp med:

GhostFolder = Request.ServerVariables("QUERY_STRING")
if Right(GhostFolder,1) = "/" then
  GhostFolder = Left(GhostFolder, Len(GhostFolder)-1)
  Response.Redirect(GhostFolder)
end if
Avatar billede moejensen Nybegynder
07. juli 2003 - 23:14 #10
Det sidste du skrev hjalp efter lidt tilretning på problemet. jeg skulle lige have fjernet 404; foran adressen.

Men men

Jeg får stadig fejlen når jeg også har sidelinket på. ex. :
www.siden.dk/menulinks/sidelinks
www.siden.dk/menulinks/sidelinks/

fejlen kommer både med og uden "/", jeg forstår det simpelthen ikke, når den nu bliver ført tilbage til default.asp, den vil jo altid ligge i roden.

hvis jeg skulle bruge muligheden med relative links til css og grafik, hvordan skal det så gøres?
Avatar billede nielle Nybegynder
08. juli 2003 - 08:18 #11
Så lad os tage fat i din kode. Jeg forstår ikke hvad det der "11" går i denne stump af koden:

Sidelink = Right(strQS,Len(strQS) - InStrRev(strQS,"/"))
strQS = Right(strQS, len(strQS) - 11)  <-- Hvorfor "11"?
pos1 = instr(strQS,"/")
pos2 = instr(pos1+1,strQS,"/")

Den var ok ad det var "default.asp" du ledte efter (11 tegn lang), men når det er menulink og sidelink (som vel i virkeligheden står for nogle talværdier) så er 11 vel ikke nødvendigvis den rigtige?

Min oprindelige stump kode:

Pos = InStrRev(GhostFolder, "/")
sidelink = Right(GhostFolder, Len(GhostFolder)-Pos)

GhostFolder = Left(GhostFolder, Pos-1)

Pos = InStrRev(GhostFolder, "/")
menulink = Right(GhostFolder, Len(GhostFolder)-Pos)

- kommer uden om det problem ved at opdele der hvor der står "/"-tegn. Jeg kan ikke se nogen speciel grund til at dette ikke skulle virke hos dig?

I din kode - med de 11 - er det en potentiel mulighed for at i hvert fald menulink bliver "skåret over":

www.siden.dk/732927/736632

- giver:

Sidelink = Right(strQS,Len(strQS) - InStrRev(strQS,"/"))  <- Sidelink = 736632
strQS = Right(strQS, len(strQS) - 11)  <- strQS = 2927/736632
pos1 = instr(strQS,"/")  <-  pos1 = 5
pos2 = instr(pos1+1,strQS,"/")  <-  pos2 = 0 (den syntax kendte jeg ikke - er du helt sikker på at den er rigtig?)

Den burde selvfølgelig fungere når det to tal sammen med ”/” er mindre end 11 i længden, men hvorfor overhovedet hardcode sådan en grænse? Brug min kode på det sted.
Avatar billede nielle Nybegynder
08. juli 2003 - 08:24 #12
Jeg tror at problemet med at scriptet ikke kan finde dine billeder og dit CSS skyldes at det sikkeret tror at det stadig befinder sig i det directory hvor 404.asp køres fra.

Hvis dette er tilfælder så har du nok to muligheder:

1) Flyt 404.asp op i det directorry hvor resten af dine scripts ligger. Det kræver selvfølgelig at webserveren skal konfigureres til at lede efter det der.
2) Flyte billeder og CSS med til den position hvor 404.asp ligger. Dette er en knap så pæn løsning som den første.

Hvis du nu kaster dig over den 1. så kunne du ligeså godt konfigurere webserveren til at bruge default.asp som din 404-besked. Og dermed springe en Response.Transfer over.
Avatar billede moejensen Nybegynder
08. juli 2003 - 10:29 #13
Grunden til at min kode ser ud som den gør, skyldes dels at den skal tage højde for at der måske ikke bliver indtastet et side link, så den ikke tror at menulinket bliver til sidelink, fordi der mangler en / i optællingen.

det med de 11 der bliver talt ind, skyldes at den string man får tilbage ser således ud: 404;http://www.siden.dk/menulink/sidelink/, de 11 første tegn skal så skæres væk.

Jeg har samlet det hele i min default.asp og til at starte med virkede det ikke, men nu har jeg sat "../" foran alle billeder, css og links, og nu virker det - spørg mig ikke hvorfor.

Du skal have mange tak for hjælpen.
Avatar billede nielle Nybegynder
08. juli 2003 - 11:08 #14
Ghostfolder = Replace(Ghostfolder, "404;", "")
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
Kurser inden for grundlæggende programmering

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