We have moved our umbraco v4 websites from an old server running IIS6 to a new one running IIS8.5 The sites use UrlRewriteModule to hide the page name in the urls however all of the pages except the home page return a 404 not found. Can someone please help. Thank you!
This is the bit of code that is registering the url rewrite module -
<system.webServer>
<modules>
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
</modules>
</system.webServer>
I have tried the following (suggested by another Stack Overflow thread) but Im still have the error.-
Copy the HttpModules definition in your web.config file from system.web to 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>
I tried this vb class that I saw on another site but after registering it in my webconfig its still not working -
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
I wouldn't use the UrlRewrite module that ships with Umbraco, it's OK for smaller stuff, but it doesn't perform that well any more. I believe it's being removed from the core at some point (possibly V8).
You'd be much better off using the IIS URL Rewrite module, which runs as part of the IIS pipeline, and is MUCH faster. It also supports more features.
You can find out about the module here: http://www.iis.net/downloads/microsoft/url-rewrite