UrlRewriteModule 不适用于 8.5

UrlRewriteModule not working on 8.5

我们已将 umbraco v4 网站从旧服务器 运行 IIS6 移至新服务器 运行 IIS8.5 这些站点使用 UrlRewriteModule 将页面名称隐藏在 url然而,除主页 return 之外的所有页面均未找到 404。有人可以帮忙吗?谢谢!

这是注册 url 重写模块的代码位 -

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

我尝试了以下方法(由另一个 Stack Overflow 线程建议),但我仍然遇到错误。-

将 web.config 文件中的 HttpModules 定义从 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=" 
                    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>

我尝试了这个 vb class 我在另一个网站上看到的但是在我的 webconfig 中注册后它仍然无法工作 -

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

我不会使用 Umbraco 附带的 UrlRewrite 模块,它适用于较小的东西,但它的性能不再那么好。我相信它会在某个时候从核心中删除(可能是 V8)。

最好使用 IIS URL 重写模块,它作为 IIS 管道的一部分运行,并且速度更快。它还支持更多功能。

您可以在此处找到有关该模块的信息:http://www.iis.net/downloads/microsoft/url-rewrite