2010-08-31 76 views
0

我已經實現了標準的登錄控制,一切正常。ASP.NET登錄控制劫持我的404

但是,當我輸入一個無效的URL時,它會被重定向到登錄頁面。

例如

mywebsite.com/xxx正確地給出了404

mywebsite.com/xxx.aspx導致重定向到登錄頁面

我使用ASP.NET 3.5在Windows Server 2008年

我已經設置了web.config中有以下

<httpErrors existingResponse="Replace"> 
<remove statusCode="403" /> 
<remove statusCode="404" /> 
<remove statusCode="500" /> 
<error statusCode="403" path="/xyz/NoAccess.htm" responseMode="Redirect" /> 
<error statusCode="404" path="/xyz/FileNotFound.htm" responseMode="Redirect" /> 
<error statusCode="500" path="/xyz/FileNotFound.htm" responseMode="Redirect" /> 
</httpErrors> 

認證是通過web表單

<authentication mode="Forms"> 
<forms loginUrl="Login.aspx" defaultUrl="~/External/SomeView.aspx"></forms> 
</authentication> 
<authorization> 
<deny users="?"/> 
</authorization> 

如此看來登錄頁面被劫持我的404 如何使http://www.mywebsite.com/xxx.aspx返回404,而不是重定向到的登錄頁面?

+0

要清楚我不認爲這是授權問題,即403問題。 我已經在指定的/ xyz目錄中有一個單獨的web.config。事實上,我可以通過訪問mywebsite.com/xyz/FileNotFound.htm而無需登錄即可看到FileNotFound.htm。 但是,如果我輸入類似於mywebsite.com/SomeNonExistantPage.aspx的內容,瀏覽器將使用以下URL重定向到登錄頁面mywebsite.com/Login.aspx?ReturnUrl=%2fSomeNonExistantPage.aspx 如果我然後登錄,它只會重定向到404頁面。 – BigPoo 2010-08-31 12:31:43

回答

4

我認爲你需要讓你的404頁面訪問所有用戶 - 你可以添加以下到你的web.config:

<location path="/xyz/FileNotFound.htm"> 
    <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
    </system.web> 
</location> 
0

不,登錄頁面沒有劫持404結果 - 但是你要返回403,你已經告訴認證模塊重定向到登錄頁面。

我不知道有足夠的瞭解web.config中的錯誤配置部分的內部運作,而是嘗試切換周圍的順序:

<!-- Notice that the 404 rule is before the 403 rule --> 
    <error statusCode="404" path="/xyz/FileNotFound.htm" responseMode="Redirect" /> 
    <error statusCode="403" path="/xyz/NoAccess.htm" responseMode="Redirect" /> 
    <error statusCode="500" path="/xyz/FileNotFound.htm" responseMode="Redirect" /> 

如果不工作,改變你的訪問規則允許訪問xxx.aspx,刪除

<deny users="?" /> 

因爲這需要所有用戶在他們可以訪問任何內容之前登錄。 (?匹配任何匿名的,也就是不登錄,用戶...)