2013-02-21 74 views
3

我一直在挣扎相当一段时间如下:IIS网址重写|如何删除目录和扩展名?

默认网址:

examplesite.com/folder/about.cshtml 

所需的URL:

examplesite.com/about 

基本上我要完成两两件事:

  • 1使用实际紧凑的代码删除文件扩展名。
  • 2删除放置关于页面的文件夹。

我发现了一些不常见的规则来实现上述所有功能,但是当我使用IIS 8.0对其进行测试时,它们大多包含大量冗余代码,导致网站崩溃。

所以我希望有人可以分享一个紧凑的规则,适合我的需求。或者以相同的结果分开规则。

每一个贡献是非常赞赏:)

+2

IIRC with Razor你可以放弃'.cshtml' - 无论如何 - http://www.asp.net/web-pages/tutorials/working-with-pages/creating-readable-urls-in-aspnet-web- pages-sites – Lloyd 2013-02-21 22:10:07

回答

4

我不能肯定我完全了解你的需求,但这里的东西是至少接近。它删除第一个文件夹和文件扩展名(所以examplesite.com/folder/about.cshtml变成examplesite.com/aboutexamplesite.com/folder/help/about.cshtml变成examplesite.com/help/about)。如果你想剥离所有文件夹,然后删除?

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

更新:

好吧,我想你想要的东西是那么两个规则的组合:

<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> 

的第一条规则将确保所有的请求都以友好的URL。第二个采用友好的URL并将其重写为物理路径,物理路径为folder/[FRIENDLY_PATH].cshtml

+0

它使得由重写造成的页面无法访问。 – Nikita 2013-02-22 00:39:59

+0

对不起,最终目标是什么?你希望用户访问'examplesite.com/about'并将其提供给'examplesite.com/folder/about.cshtml'吗? – emjohn 2013-02-22 01:28:07

+0

是的,虽然我想要一个持久化的URL,所以'examplesite.com/folder/about.cshtml'不应该显示在urlbar中。 – Nikita 2013-02-23 19:01:54