Avatar billede EveryMA Mester
30. juni 2014 - 16:30 Der er 14 kommentarer og
1 løsning

Friendly URL med IIS

Hej.
Jeg har læst mig frem til at man kan skabe en friendly url via. iis Rewrite URL. Jeg har forsøgt i timevis og fulgt adskillige guides - men hver gang er der noget, der ikke stemmer overens.

Jeg vil gerne gå fra fil.asp?id=522 til domain.dk/emne-placeres-her

Jeg har forsøgt følgende:
Oprette en rule i IIS, men her kan jeg kun få den til at lave linket således: domain.dk/fil/id

altså vil linket direkte være: domain.dk/fil/522

fil.asp finder id'et i databasen og udskriver elementer tilhørende, hvor der også er et emne. Emnet skal være i adressebaren, men den vil og kan kun tage fat i ID'et, som skrevet foroven

Nogen der har en god guide liggende, som beskriver det? Og det er ASP og ikke .net :-)
Avatar billede keysersoze Guru
30. juni 2014 - 17:11 #1
Den rigtige side er desværre lidt teknisk udfordret lige pt så du må nøjes med en wayback machine; http://web.archive.org/web/20110901051918/http://www.web-dev.dk/post/Pc3a6n-brugervenlig-og-sc3b8gemaskinvenlig-URL-med-ASP.aspx
Avatar billede EveryMA Mester
30. juni 2014 - 17:39 #2
Tak for svar.
Jeg har læst den lidt igennem.

Men på intet tidspunkt kan jeg læse mig til, at den ændrer URL'en til det emne, man er klikket ind under? Man skal jo også definere urlen på hovedsiden og ændre den fra fil.asp?id=522 til den nye url - det beskrives der ikke hvordan man gør.

Jeg tænker jo at jeg bare opretter et nyt punkt i mysql og så finder den automatisk frem til et link, som er det jeg skriver som 'emne'. Altså "Hej: Dette er emnet" bliver til "hej-dette-er-emnet" - og når man trykker på dét link, så kommer man ind på den tilhørende side.
Avatar billede keysersoze Guru
30. juni 2014 - 18:50 #3
Hvis du vil omskrive din gammeldags URL til noget andet kan fx du smide den ind igennem en function, der ud fra dit id beregner hvad du har behov for - men det er der umiddelbart ingen grund til, du skal jo bare skrive URL'en som du reelt vil have den, fx

<a href="/" & rs("urlname") % "">link</a>
Avatar billede EveryMA Mester
30. juni 2014 - 19:17 #4
men så bliver det

/et-eller-andet-link

så kan filen der åbnes jo ikke indlæse database-oplysningerne. Der er jo intet querystring at tage det fra?
Avatar billede keysersoze Guru
30. juni 2014 - 21:39 #5
Korrekt - der er ingen egentlig querystring med fx et id, men du har vil også hvad du har behov for at parametre i din URL, nemlig "et-eller-andet-link".
Avatar billede EveryMA Mester
01. juli 2014 - 11:15 #6
Det har jeg jo ikke, det jo derfor jeg skrev post nummer fire :-)

Hvis emnet er: keysersoze hjælper everyma

Så bliver linket:

domain.dk/keysersoze-hjaelper-everyma

men hvordan skal visnings-filen nogensinde gå ind og tage data ud fra netop det emne? Der jo intet der definerer, at det er emnet.

Så skal det jo se sådan ud:

domain.dk/?emne=keysersoze-hjaelper-everyma

^og det jo ikke godkendt :-)
Avatar billede keysersoze Guru
01. juli 2014 - 11:38 #7
det lyder for mig som om du slet ikke har forsøgt bare en lille smule?

Du kan ikke bruge id til noget såfremt den ikke må fremgå fx som en querystring så glemt alt om det - du er derfor nødt til at have et andet kendemærke og det er i tutorialen en kolonne hvori urlname er gemt. Dette urlname benytter du til at lave dine URLs med (som angivet i #3) - når du så laver dit setup som i tutorialen vil du via Request.ServerVariables kunne aflæse de nødvendige informationer og benytte dem til at lave dit opslag i databasen. Altså, din URL bliver pæn og helt som ønsket mens du stadig har informationer til at hente nødvendige data.
Avatar billede EveryMA Mester
01. juli 2014 - 23:07 #8
Jeg tror vi er gået forbi hinanden.
Jeg 'nærstuderede' lige det link du sendte mig.
Her skriver den;

SQL = "SELECT id, realname, urlname, description FROM categories...

Så ifølge dét script, så skal man SELV skrive det brugervenlige URL når man opretter en post? Scriptet går altså ikke selv ind og omskriver emnet så linket bliver med bindestreg mellem hvert ord m.v.?

Er det den optimale måde, at gøre det på? Jeg kender ikke meget til det - men jeg gik ud fra, at 'systemet' selv kunne finde frem til link-urlen udfra det emne, man skriver ind i databasen.
Avatar billede keysersoze Guru
02. juli 2014 - 07:48 #9
Der er ikke noget endeligt facit på hvordan sådan en opgave skal løses - men du er i hvert fald nødt til at gøre noget alternativt i forhold til hvad du plejer eller også må du nøjes.

Du kan fx lave din URL som /din-sides-titel/4837 eller /4837-din-sides-titel så du alligevel har dit id med i url'en eller du kan nøjes med en titel-kolonne i databasen du urlencoder og også benytter til at sammenligne med. Men hvis du slet ingen informationer har om sammenhængen mellem hvad der på den ene eller anden måde står i din URL og så informationerne i databasen når du ingen vegne - det er jo blandt andet derfor du i din gamle model havde en id-kolonne.
Avatar billede keysersoze Guru
02. juli 2014 - 08:26 #10
Det smarte ved urlname, som i artiklen, er, at du får mulighed for at gøre kolonnen unik på samme måde som en id-kolonne - du kan sagtens have flere bøger, cykler, artikler eller whatever, der hedder, og skal hedde, det samme men det kan du ikke styre hvis du ikke har noget unikt at sammenligne med medmindre altså du på den ene eller anden måde fletter id ind i din url.
Avatar billede EveryMA Mester
05. juli 2014 - 09:25 #11
Jeg fik det til at fungere. Uden alt det med 404.asp-fejlsiden. Men nu frygter jeg at det er åben for SQL-injections.

På den ene side kan jeg kalde ASP-filen (der viser indhold) nøjagtigt hvad jeg vil, uden brugeren kan se det. På den måde kan de jo under ingen omstændigheder rode med URL'en, korrekt? Linket er jo domain.dk/et-eller-andet. Altså ingen ASP-fil er synlig.

Kan man ikke kun gå ind og lege med SQL'en såfremt man kender navnet på filen?
Avatar billede keysersoze Guru
05. juli 2014 - 11:24 #12
Hvis bare du arbejder med parametre er du ikke åben over for SQL injection. Det bør du gøre under alle omstændigheder da SQL injection ikke kun har noget med URL'en at gøre.
Avatar billede EveryMA Mester
05. juli 2014 - 13:19 #13
Jeg ved godt du allerede har besvaret det spørgsmålet egentlig omhandlede (tak!) men nu kom jeg pludselig i tvivl omkring din seneste besked.

"Hvis bare du arbejder med parametre er du ikke åben over for SQL injection"

Er det ikke omvendt?

Såfremt jeg på min landingsside trækker data med request.querystring så er det jo pærelet at gå ind og ændre denne?

F.eks klikker man på linket: fil.asp?adgang=nej

Så kan brugeren jo klikke sig ind, og derefter ændre nej til ja, og på den måde har man ændret i det?
(Jeg ved godt det er et håbløst eksempel af dimensioner, men jeg pointerer bare, at det da meget åbent for sql injections med requestr.querstring?)
Avatar billede keysersoze Guru
05. juli 2014 - 17:00 #14
parameters på database niveau - det er ikke querystring parametre jeg taler om.
Avatar billede keysersoze Guru
05. juli 2014 - 17:05 #15
SQL injection handler ikke om at ændre et ja til et nej og så få vist nogle andre data - det handler om at manipulere med den bagvedliggende SQL til at gøre noget andet end det den er tiltænkt, fx slette data. Alt hvad du udstiller gennem din URL vil selvfølgelig være mulig at ændre så det må du under ingen omstændigheder bruge til at styre fx sikkerhed og det gælder uanset om du benytter URL rewrite eller querystrings.
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