views:

407

answers:

3

I'm running Sitecore 6.1 on Windows 2008, IIS7, and I'm trying to use the URL Rewrite Module to do a redirect. When I enable the rule and hit the URL that triggers it, I get a YSOD. The same rule works perfectly on a non-sitecore site on the same machine. According to the Failed Request Trace, the rewrite module does its thing just fine, but then Sitecore throws an exception, even if the redirect points to another server. This is probably a result of something I have misconfigured, but I just can't understand why it doesn't work. The details from the YSOD are below.

[NullReferenceException: Object reference not set to an instance of an object.]  
   Sitecore.Nexus.Web.HttpModule.(Object sender, EventArgs e) +273  
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68  
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75  
+1  A: 

Sitecore has it's own engine for URL redirection, so some wires are probably getting crossed here. Possibly you need to move your HttpModule so it's executing earlier in the chain.

Bryan
The failure trace definitely shows the rewrite happening before the Sitecore pipeline starts. Does it still make sense that things are happening in the wrong order?
Abs
I suppose not. But it's interesting that this Nexus module is the first Sitecore registered module (I just checked my web.config). Have you tried just removing it? I'm not sure what it does.
Bryan
OK, Nexus is an integral part of Sitecore... can't disable it. Question: What happens when you just browse the target URL in a browser? Same error? What is the full URL? Does it have an extension that Sitecore won't process?
Bryan
@Brian - if you browse to the URL with a 'normal' browser, the page loads fine. It's only when a crawler tries to access the rewritten URL that it throws up the 302 'object moved' error. At least that's what is happening in our case.
ianpoley
A: 

You can get the same error when doing

Response.Redirect("~/SomeUrl.aspx")

within C# code, the way to fix this is to use the overloaded:

Response.Redirect("~/SomeUrl.aspx", true)

which will end the response immediately.

The rewrite module is obviously not ending the request immediately allowing Sitecore to hit this problem. You could get around this problem by creating a module to deal with the redirects or trying to extend the URL Rewrite Module to end the response immediately.

Rhys Godfrey
A: 

Use the pipeline mode "Classic" rather than "Integrated"

http://sdn.sitecore.net/Products/Sitecore%20V5/Sitecore%20CMS%206/ReleaseNotes/KnownIssues%20Recommended/Rewriting%20URLs.aspx

burnt_hand
The problem with this 'fix' is that if you're using the new extension-less URL option (that drops the .ASPX extension), you can't run the project in classic mode. It will serve up 404 pages.
ianpoley
@ianpoley - The funny thing was, after flicking over to classic, then back to Integrated this has now been fixed
burnt_hand