如何使用IIS7的URLRewrite模块阻止直接访问.aspx页面?

时间:2011-03-30 21:14:02

标签: asp.net iis-7 url-rewriting web-config

我正在使用IIS7的URLRewrite功能隐藏ASP.NET WebForms应用程序URL中的.aspx扩展名。

我正在使用以下配置:

<rule name="WebFormsToMVC" stopProcessing="true">  
  <match url="^(.*?)\.aspx\?*?.*$" />  
    <conditions>  
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />  
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />  
    </conditions>  
  <action type="Rewrite" url="{R:1}" />  
</rule>`

我现在可以浏览:

http://www.mytest.com/contact

并将其重写为:

http://www.mytest.com/contact.aspx

这会保留浏览器地址栏中的“漂亮”网址。我还更新了网站上的所有链接,以使用无扩展名的网址。

问题是仍然可以直接访问基础.aspx页面,我想阻止它。

如果用户浏览http://www.mytest.com/contact.aspx,我希望将其重定向/重写为http://www.mytest.com/contact,或者至少返回“找不到网页”。

更新

我设法通过将所有.aspx页面重定向到主目录来实现此目的。这并不理想,因为我更愿意将它们发送到非.aspx版本,但它现在会用。

<rule name="Block .aspx" stopProcessing="true">  
    <match url=".aspx" />  
    <action type="Redirect" url="/" />  
</rule>`

如何重写直接将.aspx页面定位的网址并将其重定向到我的友好网址格式?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

以下规则会从网址中删除.aspx,然后将浏览器重定向到无扩展名网址:

<rule name="Redirect to friendly" stopProcessing="true">
    <match url="^(.*)\.aspx$" />
    <action type="Redirect" url="{R:1}" />
</rule>

如果您有一个名为contact.aspx的页面和一个名为/contact的文件夹,我会用这种方法(以及您的其他规则)预见的问题。这可能会产生一些意想不到的问题。