この問題の解決に1日半費やしました。基本的に、Framework 4.0を使用するIIS7でフォーム認証を備えたASP.net Webサイトを持っています。
Authorizationは、ドキュメントが指定されていない状態でヒットすることを除いて、すべてのシナリオで完全に機能しているようです(デフォルトのドキュメントに解決する必要があります)。
たとえば、(まだ開発されていないサイトで厳しいものにしないでください;))、 http://www.rewardroster.com/Default.aspx 完全に機能します。このページでは、指定されたように匿名アクセスを許可する必要がありますweb.config。
しかし、www.rewardroster.comを直接押すと、戻りURLが "/"またはLogin.aspx?ReturnUrl =%2fに設定されたログインページにリダイレクトされます。
私が試したいくつかのこと:
1)認証を[なし]に設定すると、デフォルトのドキュメントが機能するため、問題は発生しません。
2)Web.configにDefaultDocument属性を追加
3)IISのDefault DocumentリストのDefault.aspxを除くすべてのエントリを削除しました
4)設定にMachineKeyエントリを追加
5)IISの統合パイプラインからクラシックパイプラインに切り替え
これが私の設定にあるものです:
<authentication mode="Forms">
<forms name="appNameAuth" loginUrl="Login.aspx" protection="All" timeout="60" slidingExpiration="true" defaultUrl="Default.aspx" path="/">
</forms>
</authentication>
</authentication>
<location path="Default.aspx">
お時間をいただき、ありがとうございました。
これは私の解決策でした:
Global.asax
、 方法: Application_BeginRequest
、以下を配置します:
if (Request.AppRelativeCurrentExecutionFilePath == "~/")
HttpContext.Current.RewritePath("HomePage.aspx");
素晴らしくシンプルで、Webサイトが構成変数に基づいて複数のホームページを使用している場合、使用するホームページの周りにロジックを構築する機会があります。
Dmitry.Alk
ルートパスにアクセスしようとしたときにも同じ問題が発生し、前述のすべてを試しました。 Asp.net 4.0は、2つのExtensionlessUrlモジュールをIIS 7。
<system.webServer>
<handlers>
<remove name="ExtensionlessUrl-Integrated-4.0"/>
<remove name=" ExtensionlessUrl-ISAPI-4.0_32bit "/>
</handlers>
</system.webServer>
追加情報
これを修正するために結局行ったのは、「/」のRequest.QueryString ["ReturnUrl"]をチェックするために、ログインページに数行のコードを書き込むことです。それが見つかった場合は、default.aspxにリダイレクトされます。
ページを指定せずにフォーム認証で呼び出しをインターセプトしない方法を見つけることができませんでした(例:www.mysite.com)。 :(私は.NET 4 URLルーティングを試しても、フォーム認証がリクエストを乗っ取ることを防ぐことはできませんでした。
以下は、login.aspxで使用したコードです。
protected void Page_Load(object sender, EventArgs e)
{
if (!(IsPostBack || IsAsync))
{
string returnUrl = Request.QueryString["ReturnUrl"];
if (returnUrl != null)
if (returnUrl == "/")
Response.Redirect("default.aspx");
}
}
同様の問題がありました。ログインしていないときのスタイルなし、www.site.nl \はログインページにリダイレクトされ(ホームページへのリダイレクトURLを使用)、www.site.nl\Homeと入力します(言及されているリダイレクトURLと同じホームページ)以前は)ログインは必要ありませんでした。
解決策は:
それは私にとってうまくいきました。
幸運を
ヨハンの解決策は私にとってはうまくいきましたが、要求がサイトルートに対するものである場合に限ります。
私のサイトは次のように構成されています:
ヨハンの良いアドバイスに従って、www。[mysite] .comへのリクエストはフォームのログインページに送られ、ログイン後はデフォルトのページに送られます。ただし、誰かが「/ [somestuff] /」を要求した場合でも、機能しません。
[somestuff]および[morestuff]ディレクトリで匿名認証を有効にしてから、これらのディレクトリ内の個々のファイルで匿名認証を無効にすることで機能しました。人々がdefault.aspxからどこに行くのか、または最初に[somestuff] /default.aspxを要求するだけでよいのであれば、これは私がサポートしたいセキュリティ設定ではありません。しかし、今はそれが失敗している理由を知っています。デフォルトのドキュメントを使用したいディレクトリへの匿名アクセスが必要なようです。
私は同じ問題に遭遇し、このように解決しました:
追加したDmitry.Alkソリューションの横にあるGlobal.asaxで:
if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~/default.aspx")
HttpContext.Current.RewritePath("Default.aspx");
if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~/")
HttpContext.Current.RewritePath("Default.aspx");
if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~")
HttpContext.Current.RewritePath("Default.aspx");
今日も同様の問題がありました。統合パイプラインを使用して、asp.net以外のリソース(静的ファイル、phpなど)を保護しようとしました。
ルートweb.configにルールがあり、特定のリソースへのアクセスをケースバイケースで許可していました。
これは、 "/ Default.aspx"への要求は問題なく、 "/"への要求が認証されない(無限にログインページにリダイレクトされる)ことを除いて機能しました。
私の問題は、Asp.Net UrlAuthenticationモジュールがすべてのリソースタイプに対して有効になっていたためで、どうやらこれは私のシナリオでは機能しません。代わりに、そのモジュールを変更して管理対象リソースでのみ機能し、IIS7の非管理対象URL認証をインストールする必要がありました。次に、それを構成する必要があり(異なる認証設定を使用しているため)、管理されていないリソースに対してRoleManagerが有効になっていることを確認しました(役割で認証しているため)。このURLは役に立つかもしれません: http://learn.iis.net/page.aspx/142/understanding-iis-70-url-authorization/