2011-05-06 131 views
9

我的ASP.NET Forms 4.0网站正在运行窗体身份验证。默认情况下,未经授权的用户被拒绝,然后我允许访问某些页面。 我有一个问题,允许访问默认的网址:http:/example.com。我在web.config中找到相关定义默认页:允许匿名访问默认页面

<defaultDocument> 
    <files> 
     <clear/> 
     <add value="default.aspx" /> 
    </files> 
</defaultDocument> 

,我有这样的定位越权:

<location path="default.aspx"> 
    <system.web> 
     <authorization> 
      <allow users="?"/> 
     </authorization> 
    </system.web> 
</location> 

它的工作原理确定,当我去的完整URL:http://example.com/default.aspx,但重定向到登录页面如果我去http://example.com

任何想法我做错了什么?

+0

我知道你在做什么错误 - 'path'匹配被请求的路径,而不是它被重定向到的路径(在服务器端),所以http://mysite.com与默认值不匹配。 ASPX。我不能帮你修复它,虽然:( – Ryan 2011-05-06 20:39:57

+0

请参阅我的答案有关删除ExtensionlessUrl模块[窗体身份验证忽略默认文档:](http://stackoverflow.com/questions/3824951/forms-authentication-ignoring-default -document) – 2011-07-07 13:26:21

回答

10

我在响应(德米特里·)刚刚找到答案,类似的问题在这里SO:Forms Authentication Ignoring Default Document

在Global.asax中,方法:的Application_BeginRequest,放置以下:

if (Request.AppRelativeCurrentExecutionFilePath == "~/") 
    HttpContext.Current.RewritePath("default.aspx"); 

曾任职像魅力!

+0

你为我节省了很多头痛...是的,它是2015年,我仍在使用网络表单,谢谢! – 2015-04-01 03:50:07

-2

这对我的作品在测试Web应用程序:

<location path=""> 
    <system.web> 
     <authorization> 
      <deny users="*"/> 
     </authorization> 
    </system.web> 
</location> 

<location path="Default.aspx"> 
    <system.web> 
     <authorization> 
      <deny users="*"/> 
     </authorization> 
    </system.web> 
</location> 

现在我不能让任“/”或“/Default.aspx” - 给一个尝试(但使用allow代替) 。

+1

它不喜欢它 - IIS扔了一个错误,路径是空的 – Andrey 2011-05-06 20:59:26

+0

好吧,我不确定...对不起! – 2011-05-06 21:00:04

+1

@Josh - 你可以删除你的答案,所以它不会误导别人吗?我不想downvote它:) – Andrey 2011-05-06 21:00:48

3

我刚刚想出了如何解决这个问题,而不必欺骗重定向。

如果在从.Net 2转换到.Net 4之后我发生了这种情况,我从来没有在互联网上的任何地方找到我的解决方案,所以在这里。

如果像我一样的登录页面也是默认的页面,你需要确保你以下两件事情在web.config文件

添加这免除身份验证Default.aspx的(没这需要在.net 2)

<location path="default.aspx"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

而从这个

<forms name="myform" loginUrl="~/default.aspx" timeout="240" defaultUrl="~/home.aspx" slidingExpiration="true" protection="All" path="/" /> 

更改登录网址这个

<forms name="myform" loginUrl="~/" timeout="240" defaultUrl="~/home.aspx" slidingExpiration="true" protection="All" path="/" /> 

,你应该罚款各项工作NOWS,刚刚尝试过了两个不同的网站和它的伎俩,我

+0

不是一个真正的解决方案,你只是将身份验证网址(login.aspx)更改为你的根目录。反对它的建议。 – 2015-12-09 20:57:56

1

我不喜欢做针对此问题的代码更改,尤其是因为我的网站在我的Windows Server 2008 R2机器上工作正常,但在我的Windows 7 SP1开发机器上无法正常工作。

事实证明,这个问题的根源是在Service Pack 1的Windows 7的更新:

http://support.microsoft.com/kb/2526854

的解决方案似乎是禁止添加的新的“ExtensionlessUrl”功能在SP1:

<system.webServer> 

    <handlers> 
    <remove name="ExtensionlessUrl-ISAPI-4.0_32bit" /> 
    <remove name="ExtensionlessUrl-ISAPI-4.0_64bit" /> 
    <remove name="ExtensionlessUrl-Integrated-4.0" /> 
    </handlers> 

    <validation validateIntegratedModeConfiguration="false" /> 

</system.webServer> 

显然,如果你正在使用ExtensionlessUrl功能这不会为你工作,但是我在这里记录它为那些迁移遗留网站,想知道什么突然走ne错了。