views:

775

answers:

3

I really like the IIS7 URL rewriting module and so far, it worked great for me.

There is one thing that I'm not sure how to do: I would like to permanently redirect all URLs that have encoded spaces (%20) in them to a URL that has the spaces replaced with a dash (-).

So this:

http://www.test.com/About%20Our%20Mission.aspx

should be redirected to this:

http://www.test.com/About-Our-Mission.aspx

Is that even possible with only regular expressions?

+1  A: 

There's no way to do directly what you want.

You might settle for something like this:

^(.*)%20(.*)%20(.*)%20(.*)  replaced by:  {R:1}-{R:2}-{R:3}-{R:4}
^(.*)%20(.*)%20(.*)         replaced by:  {R:1}-{R:2}-{R:3}
^(.*)%20(.*)                replaced by:  {R:1}-{R:2}
Jeremy Stein
That's pretty much exactly what I have right now(note that %20 is interpreted as a whitespace by IIS Rewrite):Pattern:(\w+)\s+(\w+)\s+(\w+)\s+(\w+.aspx)Redirect URL:{R:1}-{R:2}-{R:3}-{R:4}Works pretty well, but I also have paths like About%20Us/Blah%20Dah.aspx. I would need a whole bunch of rules to deal with all possible spaces.
Stefan
+1  A: 

The same may be achieved in one rule with ISAPI_Rewrite 3 or Helicon Ape for any number of %20s:

RewriteBase /
RewriteRule ^(.*)%20(.*)$ $1-$2 [LP,R=301,L]
TonyCool
A: 

One of then nice things about .aspx is how easy it is to rewrite URLs with real code. Just add a little search and replace code to your web site's Global.asax file:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    string path = HttpContext.Current.Request.Path;
    // Search and replace, RegEx, etc.
    HttpContext.Current.RewritePath(path);
}

On IIS7, you have to add some entries in web.config to handle rewriting non .aspx URLs:

<system.webServer>
    <handlers>
        <clear/>
        <add name="Brands1" path="Brands/*.html" verb="*" type="ASP.global_asax" resourceType="Unspecified"/>
        <add name="Brands2" path="Brands/\?*.html" verb="*" type="ASP.global_asax" resourceType="Unspecified"/>
        <!-- ... -->

The IIS7 URL rewriting module is great, but just because you have a hammer...

P.J. Tezza