6

I have been struggling with the following for quite some time now:

Default url:

examplesite.com/folder/about.cshtml

Desired url:

examplesite.com/about

Basically I want to accomplish two things:

  • 1 Remove the file extension with realtively compact code.
  • 2 Remove the folder that houses the about page.

I have found some uncommon rules to achieve all the above, but they mostly contain a lot of redundant code that crashes my site when I test it with IIS 8.0.

So I was hoping someone could share a rule that is compact and fits my needs. Or seperate rules with the same outcome.

Every contribution is much appreciated :)

Nikita
  • 609
  • 2
  • 7
  • 18
  • 2
    IIRC with Razor you can drop the `.cshtml` anyhow - http://www.asp.net/web-pages/tutorials/working-with-pages/creating-readable-urls-in-aspnet-web-pages-sites – Lloyd Feb 21 '13 at 22:10

1 Answers1

6

I'm not certain I entirely understand your needs, but here's something that's at least close. It strips out the first folder and file extension (so examplesite.com/folder/about.cshtml becomes examplesite.com/about and examplesite.com/folder/help/about.cshtml becomes examplesite.com/help/about). If you wanted to strip all folders then just remove the ?.

<rule name="Remove Directory and Extension">
    <match url="^(.*?)/(.*)\.cshtml$" />
    <action type="Rewrite" url="{R:2}" />
</rule>

Update:

Ok, I think what you want is a combination of two rules then:

<rules>
  <rule name="Redirect requests to friendly URLs">
    <match url="^(.*?)/(.*)\.cshtml$" />
    <action type="Redirect" url="{R:2}" />
  </rule>
  <rule name="Rewrite friendly URLs to phsyical paths">
    <match url="^(.*)$" />
    <action type="Rewrite" url="folder/{R:0}.cshtml" />
  </rule>
</rules>

The first rule makes sure that all requests are to friendly URLs. The second takes the friendly URL and rewrites it to your physical path, where the physical path is folder/[FRIENDLY_PATH].cshtml.

emjohn
  • 69
  • 4
  • It makes the page effected by the rewrite inaccessible. – Nikita Feb 22 '13 at 00:39
  • Sorry, what's the end goal? Do you want users that go to `examplesite.com/about` and be served `examplesite.com/folder/about.cshtml`? – emjohn Feb 22 '13 at 01:28
  • Yes, though i'd like to have a persistent url, so `examplesite.com/folder/about.cshtml` shouldn't ever show in the urlbar like that. – Nikita Feb 23 '13 at 19:01