Meddelande

Minska
No announcement yet.

URL Rewrite i ASP.Net

Minska
X
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • URL Rewrite i ASP.Net

    ...
    Last edited by echoSwe; 2007-04-14, 19:19.

  • #2
    ...
    Last edited by echoSwe; 2007-04-14, 19:19. Anledning: felstavning

    Kommentera


    • #3
      Om du vill ha en smidigt sätt att styra querystrings etcetera till olika katalogstrukturer, vilket inte går att klara på ett smidigt sätt med urlrewrites finns det ett projekt på codeproject som heter just urlrewrite som fungerar ypperligt med hjälp av lite settings i web.config, styrt med regex

      Kommentera


      • #4
        Varför skulle inte det gå att klara på ett smidigt sätt med urlrewrites? För url-rewrites är ju det som jag frågar om! Menar du att det är omöjligt att använda url-rewrites och query-strings samtidigt? Eller menar du att lösningen som jag har ovan är undermålig?

        Jag hittar ingen URL Rewrite på codeproject.
        Förutom: http://www.codeproject.com/aspnet/Chameleon.asp som i princip bara diskuterar sammas saker som jag gjorde ovan. Vill dock ha svar på min fråga.

        edit// för övrigt så behöver vi inte overrida-form attributet eftersom ASP.Net 2.0 verkar ändra sökvägen till en som stämmer...

        Jag behöver fortfarande svar på min fråga dock.

        Sedan har jag problem att få motorn att fungera när jag inte debuggar. Någon?
        Last edited by echoSwe; 2006-07-10, 09:41.

        Kommentera


        • #5
          finns ju detta på codepr.
          http://www.codeproject.com/aspnet/urlrewriter.asp
          kanske du såg?
          Du vet att staten har rätt att se dig; men du har ingen aning om vem som är staten imorgon! FRA åt helvete, ACTA er, lämna folk IPRED. ̿̿'̿'\̵͇̿̿\з=(•̪●)=ε/̵͇̿̿/'̿'̿ ̿

          Kommentera


          • #6
            Ja, den har jag sett...

            Kommentera


            • #7
              ok, tror det var den erka menade
              Du vet att staten har rätt att se dig; men du har ingen aning om vem som är staten imorgon! FRA åt helvete, ACTA er, lämna folk IPRED. ̿̿'̿'\̵͇̿̿\з=(•̪●)=ε/̵͇̿̿/'̿'̿ ̿

              Kommentera


              • #8
                Nu hänger jag inte riktigt med på vad du löst resp inte löst men jag sökte runt för kanske ett år sen och körde utifrån dessa länkar.

                http://pietschsoft.com/blog/post.aspx?postid=762
                http://www.urlrewriting.net/
                -If a word in the dictionary were mispelled, how would we know? / Steven Wright

                Kommentera


                • #9
                  http://www.urlrewriting.net/

                  Den verkar fixa det mesta som den ska . Både post-backs och själva grundfunktionen fungerar, och den är enkel att implementera och bygga ut också! Men den verkar inte fungera om du vill ha en adress som:
                  http://sajt.se/kontakt/
                  istället för
                  http://sajt.se/Kontakt.aspx

                  Jag har en känsla av att svaret ligger i den här funktionen i UrlRewriteModule.cs - som jag länkar ovan.
                  [kod] /// <summary>
                  /// Rewrites the URL.
                  /// </summary>
                  /// <param name="app">The app.</param>
                  private void RewriteUrl(HttpApplication app)
                  {
                  string requestUrl;
                  // Do the Rewrites
                  foreach (Rewrite rewrite in Rewrites)
                  {
                  requestUrl = app.Request.RawUrl;
                  if (rewrite.Regex.IsMatch(requestUrl))
                  {
                  string urlForRewrite = requestUrl;
                  string requestQuerystring = string.Empty;
                  int pos = requestUrl.IndexOf('?');
                  if (pos >= 0)
                  {
                  requestQuerystring = requestUrl.Substring(pos + 1);
                  urlForRewrite = requestUrl.Substring(0, pos);
                  }
                  // Save original querystring, url and rewrite-parameters for OnPagePreInit()

                  app.Context.Items[ItemsClientQueryString] = requestQuerystring;
                  app.Context.Items[ItemsRewriteUrlParameter] = rewrite.RewriteUrlParameter;
                  app.Context.Items[ItemsVirtualUrl] = requestUrl;

                  string destinationUrl = rewrite.Regex.Replace(urlForRewrite, rewrite.DestinationUrl, 1);
                  destinationUrl = JoinUrlParameter(HandleRootOperator(destinationUrl), requestQuerystring);

                  app.Context.RewritePath(destinationUrl, false);

                  break;
                  }
                  }
                  }[/kod]
                  Last edited by echoSwe; 2006-07-10, 15:24.

                  Kommentera


                  • #10
                    "When a request comes in for /2004/03/19.aspx, IIS notes the .aspx extension and routes the request to the ASP.NET engine. As the request moves through the ASP.NET engine's pipeline, the URL will get rewritten to ShowBlogContent.aspx?year=2004&month=03&day=19 and the visitor will see those blog entries for March 19, 2004. But what happens when the user navigates to /2004/03/? Unless there is a directory /2004/03/, IIS will return a 404 error. Furthermore, there needs to be a Default.aspx page in this directory so that the request is handed off to the ASP.NET engine.

                    So with this approach, you have to manually create a directory for each year in which there are blog entries, with a Default.aspx page in the directory. Additionally, in each year directory you need to manually create twelve more directories—01, 02, Â…, 12—each with a Default.aspx file. (Recall that we had to do the same thing—add a /Products/ directory with a Default.aspx file—in the previous demo so that visiting /Products/ correctly displayed ListCategories.aspx.)

                    Clearly, adding such a directory structure can be a pain. A workaround to this problem is to have all incoming IIS requests map to the ASP.NET engine. This way, even if when visiting the URL /2004/03/, IIS will faithfully hand off the request to the ASP.NET engine even if there does not exist a /2004/03/ directory. Using this approach, however, makes the ASP.NET engine responsible for handling all types of incoming requests to the Web server, including images, CSS files, external JavaScript files, Macromedia Flash files, and so on."
                    - http://msdn.microsoft.com/library/de...lrewriting.asp

                    ------------------------------------------

                    Med andra ord: skall du rewrita kontakt.aspx till /kontakt/ måste du pillra på inställningar på iisn. Jag har själv pulat med en urlrewriter och har suttit många timmar och förbannat mig över detta. Testa att köra sidan i cassini så ska du se att den klarar av /mapp/-sökvägar.

                    Orsaken till att det inte fungerar under IIS är att din httpmodul inte körs vid sökvägar av slaget /mapp/ då dessa inte routas till asp.net motorn av iis. Detta måste således manuellt ställas in, dvs. att allt routas till asp.net motorn (inklusive css, bilder osv osv...)

                    Men om du lyckas lösa problemet så ska jag vara den förste du meddelar
                    Twitter: @sebastianj - Blogg: SebastianJohnsson.com - Projekt: Smartlend - jämför och låna pengar

                    Kommentera


                    • #11
                      SebbeJ:
                      [citat=mig]Skriver man in
                      http://localhost/sajt/kontakt/
                      den här gången med en slash efter, så fungerar det inte lika bra - externa CSS och JS laddas ej - den omskrivna urlen blir
                      http://localhost/sajt/Kontakt.aspx/[/citat]

                      Detta fungerar alltså när jag debuggar, men inte när jag kör direkt genom port 80 på localhost. Detta kanske i sin tur i så fall beror på att visual studios testserver inte har något isapi-filter när den buggar som fångar upp katalogförfrågan, utan snarare routar allting genom asp.net. Men som sagt, det funkar om man kör debugging att requesta en katalog och få requesten genom sin httpmodule.

                      Du menar alltså
                      http://www.codeproject.com/aspnet/As...WithoutIIS.asp
                      ?

                      Har även kollat på det här ISAPI-filtret. Mitt webbhotell verkar inte helt omöjliga att installera det. Någon som använder ett som fungerar perfekt?

                      Kommentera

                      Working...
                      X