Avatar billede horsted Nybegynder
17. november 2004 - 20:46 Der er 8 kommentarer og
1 løsning

Hjælp til URL rewrite for læsevenlige URL's

Hej Eksperter

Har uden held prøvet at lave læsevenlige url'er, og vil gerne have lidt hjælp til det...

Jeg har en skabelon default.aspx, som ligger i roden af mit website, via id's (default.aspx?id=4) hentes indhold fra database ind i skabelonen.

Jeg vil gerne at mine brugere kan indtaste fx: www.domaene.dk/vitser/moldbo eller www.domaene.dk/vitser/moldbo/ og så vises fx default.aspx?id=4, mens den læsevenlige url stadig vises i adressen.

Min test kode ser ud som følger

namespace URL
{
public class MyModule : IHttpModule
    {
        public void Init(HttpApplication application)
        {
            application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
        }
        private void Application_BeginRequest(Object source, EventArgs e)
        {
            HttpContext Context = HttpContext.Current;
            Context.RewritePath("/soholm/default.aspx?id=4");
        }
        public void Dispose() {}
    }
}

og følgende kode i web.config

    <httpModules>
      <add name="MyModule" type="URL.MyModule, URL" />
    </httpModules>

Koden virker da den viser default.aspx?id=4 ligegyldigt hvilken adresse der indtastes, SÅ LÆNGE der er et filnavn i adressen (også selv om filen ikke findes) - fx www.domaene.dk/vitser/moldbo/test.aspx eller www.domaene.dk/vitser/moldbo/meretest/test.aspx

Men somsagt virker det ikke hvis der indtastes www.domaene.dk/vitser/moldbo/ eller www.domaene.dk/vitser/moldbo som den skal... hvorfor?

Er der andre smartere eller nemmere måder at gøre overstående på?

På forhånd mange tak!

Mvh, Horsted
Avatar billede horsted Nybegynder
17. november 2004 - 20:48 #1
Context.RewritePath("/soholm/default.aspx?id=4");

skal selvfølgelig være Context.RewritePath("default.aspx?id=4");
Avatar billede christian Nybegynder
17. november 2004 - 21:35 #2
request på mappe navne bliver ikke fanget af asp.net :-(
Serveren skal sættes specielt op for at fange dem, og det kan du nok ikke få lov til...

Men du kan lave en 404 asp.net fejlside som du kan lave din Context.RewritePath i. Dette vil virke uden problemer (går udfra du godt ved hvordan du sætter 404 fejlsider op i web.config)
Avatar billede horsted Nybegynder
17. november 2004 - 22:25 #3
Tak for dit svar Christian

Man kan jo selvfølgelige oprette mappeerne og lægge 'tomme' default.aspx filer i dem, men det virker lidt omfattende til det jeg skal bruge... Så kan man ikke 'snyde' den på nogen måde uden pille ved serveren? Der står måke noget om det på denne side: http://weblogs.asp.net/ssmith/archive/2003/11/06/36191.aspx -problemet er bare at jeg ikke rigtig fatter det =)
Avatar billede horsted Nybegynder
17. november 2004 - 22:47 #4
Hej igen Christian

Vil du være venlig at vise et kort eksempel hvordann jeg opsætter 404 asp.net fejlsider som bruger RewritePath? Det vil gøre mig til en lykkelig mand ;-)
Avatar billede christian Nybegynder
17. november 2004 - 22:48 #5
Nej, du kan ikke snyde den uden at pille ved serveren...

Jeg kom forresten til at tænke på at du ikke kan sætte 404 fejlsider op via web.config... adressen skal hedde *.aspx før at det vil virke.
Så det kan jo være lige meget.

Så du skal få din udbyder til at sætte serveren op til at bruge en /404.aspx side som 404 fejlside... dette vil langt de fleste udbydere godt gøre

her kommer nogle af mine Favorites omkring rewrite
http://www.asp.net/Forums/ShowPost.aspx?tabindex=1&PostID=321788
Sidste indlæg:
Ah... them I'm guessing IIS isn't set to wildcard everything to the asp.net ISAPI filter. That's the only way it'll handle paths that don't end in a file extension.

http://www.codeproject.com/aspnet/urlrewriter.asp
Under Finaly:
There's one major caveat with all this. If you want to process a request with a file extension other than .aspx such as .asp or .html, then you need to change IIS to pass all requests through to the ASP.NET ISAPI extension. Unfortunately, you will need physical access to the server to perform this, which prevents you from simply XCOPY deploying your code to an ISP.


Når du så har fået det hele op at kører vil du opdage at din form action står til din RewritePath :-( der findes også masser af info på nettet om dette emne bla.
http://www.devhood.com/messages/message_view-2.aspx?thread_id=94884

Den nemme møde er at gøre det via javascript
<script>
document.forms[0].action='';
</script>
Avatar billede christian Nybegynder
17. november 2004 - 22:52 #6
Du gør det sådan her:
<appSettings>
    <add key="AppMainNamespace" value="GeneXus.Programs" />
    <customErrors mode="off"> 
      <error statuscode="404" redirect="/redirector.aspx" />
    </customErrors>
</appSettings>

Men desværre virker det kun hvis siden hedder *.aspx
Avatar billede horsted Nybegynder
18. november 2004 - 13:24 #7
Efter en halv nats arbejde fik jeg det endelig til at fungerer via custom 404 fejlsider, og er belevet en del klogere siden ;)

MANGE tak for hjælpen Christian - læg et svar, så du kan få dine velfortjente (ydmyge) beløning...
Avatar billede christian Nybegynder
19. november 2004 - 17:45 #8
Roger that!

Skulle du ændre opsætningen på serveren?
Avatar billede horsted Nybegynder
19. november 2004 - 22:03 #9
Fik bare webhotellet til at lave custom fejlsider, og så kan jeg styrer resten fra web.config. Takker igen...
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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