2016-07-21 9 views
0

Wir haben unsere umbraco v4-Websites von einem alten Server mit IIS6 auf einen neuen mit IIS8.5 verschoben. Die Seiten verwenden UrlRewriteModule, um den Seitennamen in den URLs aller Seiten außer der Homepage auszublenden Rückgabe eines 404 nicht gefunden. Kann mir bitte jemand helfen. Vielen Dank!UrlRewriteModule funktioniert nicht auf 8.5

Dies ist das Stück Code, der die URL Rewrite-Modul registriert -

<system.webServer> 
    <modules> 
    <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" /> 
    </modules> 
</system.webServer> 

Ich habe versucht, die folgenden (durch einen anderen Stack-Überlauf-Thread vorgeschlagen) aber ich bin immer noch die error.-

kopieren Sie die Httpmodules Definition in der Datei web.config von system.web system.webServer

<system.web> 
     <httpModules> 
      <add name="UrlRewriteModule"type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" /> 
     </httpModules> 
</system.web> 

    <system.webServer> 
    <modules> 
     <add name="UrlRewriteModule"type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" /> 
    </modules> 
<system.webServer> 

UrlRewriting.config -

<?xml version="1.0" encoding="utf-8"?> 
<urlrewritingnet xmlns="http://www.urlrewriting.net/schemas/config/2006/07"> 
    <rewrites> 
     <!-- 
       Urlrewriting.Net is a cool tool, what can make your urls look nice. 
       The rewriting is controlled with regular expressions. To get more help 
       look at http://www.urlrewriting.net/. 

       Remember to read the manual! 
       http://www.urlrewriting.net/download/UrlRewritingNet20.English.pdf 

       The sample below rewrites a url from 
       "/product/someproductid.aspx" to 
       "/product.aspx?productid=someproductid" 

       The user will not see the rewritten path! The page that will be 
       loaded from umbraco will instead be: 
       "/product.aspx?productid=someproductid" 

       <add name="produktidrewrite" 
        virtualUrl="^~/product/(.*).aspx" 
        rewriteUrlParameter="ExcludeFromClientQueryString" 
        destinationUrl="~/product.aspx?productid=$1" 
        ignoreCase="true" /> 

       This sample is usefull for a productpage, where the product comes from a 
       dynamic datasource, e.g. a database. The querystring "productid" can be loaded 
       from the template, into a macro, that then loads the product! 

       Any bugs or problems with the rewriter, contact Anders/Duckie 
      --> 

     <add name="test" 
        virtualUrl="^~/technology/(.*).aspx" 
        rewriteUrlParameter="ExcludeFromClientQueryString" 
        destinationUrl="~/technology/default.aspx" 
        ignoreCase="true" /> 


    </rewrites> 
</urlrewritingnet> 

Ich habe versucht, diese vb Klasse, die ich auf einer anderen Seite sah aber nachdem es in meinem webconfig seine noch nicht registriert arbeiten -

Imports System 
Imports System.Web 
Imports System.Data 

Public Class URLRedirector 
    Implements IHttpModule 

    Private mdsRedirect As DataSet 

    Public Sub Init(ByVal TheApp As HttpApplication) Implements IHttpModule.Init 
     AddHandler TheApp.BeginRequest, AddressOf Me.Application_BeginRequest 
     ' Cache the redirection file in a dataset. 
     mdsRedirect = New DataSet() 
     mdsRedirect.ReadXml(HttpContext.Current.Server.MapPath("~/App_Data/Redirection.xml")) 
    End Sub 

    Public Sub Dispose() Implements IHttpModule.Dispose 
     mdsRedirect = Nothing 
    End Sub 

    Private Sub Application_BeginRequest(ByVal Source As Object, ByVal e As EventArgs) 
     Dim oApp As HttpApplication = CType(Source, HttpApplication) 
     Dim strRequestUri As String 

     strRequestUri = oApp.Request.Url.AbsoluteUri.ToLower() 

     ' OPTION 1: Process all requests (use when running in Visual Studio)... 
     ' Redirect known paths and just let the others fall through. 
     ' Call RedirectKnownPath(oApp, strRequestUri) 

     ' OPTION 2: Process only the 404 requests (use when running under IIS)... 
     ' For this module to work under IIS, you must configure the web site to redirect 
     ' all 404 requests back to the application. 
     If strRequestUri.Contains("?404;") Then 
      If Not RedirectKnownPath(oApp, strRequestUri) Then 
       ' Send all 404 requests for unknown paths to the default page. 
       oApp.Response.Redirect("~/Default.aspx") 
      End If 
     End If 
    End Sub 

    Private Function RedirectKnownPath(ByVal oApp As HttpApplication, ByVal strRequestUri As String) As Boolean 
     Dim strOriginalUri As String = strRequestUri 
     Dim intPos As Integer 
     Dim boolPathRedirected As Boolean = False 
     Dim oRow As DataRow 
     Dim strRequestPath As String 
     Dim strDestinationUrl As String 

     ' Extract the original URL if you received a 404 URL. 
     intPos = strRequestUri.IndexOf("?404;") 
     If intPos > 0 And strRequestUri.Length > (intPos + 5) Then 
      strOriginalUri = strRequestUri.Substring(intPos + 5) 
     End If 

     ' Redirect the request if you find a matching request path. 
     For Each oRow In mdsRedirect.Tables(0).Rows 
      strRequestPath = Convert.ToString(oRow("RequestPath")).ToLower() 
      If strOriginalUri.EndsWith(strRequestPath) Then 
       strDestinationUrl = Convert.ToString(oRow("Target")) 
       Call oApp.Response.Redirect(strDestinationUrl, False) 
       boolPathRedirected = True 
       Exit For 
      End If 
     Next 

     Return boolPathRedirected 
    End Function 
End Class 
+0

Können Sie die Rewrite-Regeln aus der config.xml enthalten. Wenn Sie die Verfolgung fehlgeschlagener Anfragen aktivieren, können Sie weitere Informationen zu dem Fehler sammeln. –

+0

Hallo Phil. TheUrlRewriting Config zeigt kaum etwas an, also habe ich einen Eintrag namens test hinzugefügt, bekomme aber immer noch den gleichen Fehler. –

+0

Ich habe auch fehlgeschlagene Anfrage Tracing aktiviert. –

Antwort

1

ich nicht das UrlRewrite Modul verwenden würde, die Schiffe mit Umbraco, es ist OK für kleinere Sachen, aber es funktioniert nicht mehr so ​​gut. Ich glaube, es wird irgendwann aus dem Kern entfernt (möglicherweise V8).

Mit dem IIS URL Rewrite-Modul, das als Teil der IIS-Pipeline ausgeführt wird, ist es viel besser und viel schneller. Es unterstützt auch mehr Funktionen.

können Sie sich hier über das Modul herausfinden: http://www.iis.net/downloads/microsoft/url-rewrite

+0

Hallo Tim, das hat sehr gut funktioniert! –