2010-08-24 77 views
1

认证后,asp.net将用户重定向到.../myapp/default.aspx而不是.. ./myapp/Asp.Net表单认证重定向到.../myapp/default.aspx而不是.../myapp/

有没有解决这个问题的方法?我认为这是一个有点难看,不要提到多余的在url上包含额外的default.aspx。

我试图把下面的代码在我default.aspx.cs Page_Load中的功能,但它会导致一个重定向循环,因为它不能区分用户是否访问的myapp /或MYAPP/Default.aspx的:

if (Request.RawUrl.ToLower().EndsWith("/default.aspx")) 
    Response.Redirect("./"); 

谢谢!

+0

我也尝试添加下列到web.config中的形式部分: defaultUrl =” ./“ – Chris 2010-08-24 01:02:37

+4

web.config设置应该是'defaultUrl =”〜/“'(代字号代表”此应用程序的虚拟路径“)。 – devstuff 2010-08-24 01:44:05

+0

做了上述工作?如果是这样,让@devstuff知道,以便他可以发布这个作为一个解决方案下面,并得到一些意见:) – Tommy 2010-08-24 02:00:13

回答

6

如果您使用的是登录控件,请自行决定重定向的发生方式。 使用登录控件的事件(我认为这是身份验证)和:

if (Request.QueryString["ReturnUrl"] != null) 
{ 
    FormsAuthentication.RedirectFromLoginPage("someuserid", false); 
} 
else 
{ 
    FormsAuthentication.SetAuthCookie("someuserid", false); 
    Response.Redirect("~/SomePage.aspx"); 
} 
0

您将需要查看在IIS中设置的默认页面。

+0

我相信这很好。在IIS中,如果您不指定页面,它将尝试按照首选项的顺序提供默认页面。如果您确实指定了一个页面(默认与否),它仍然会在URL中显示该页面。这就是他看到这种行为的原因。 – Tommy 2010-08-24 01:12:38

+0

啊,是的,你是对的。我误解了这个问题。 – 2010-08-24 01:23:10

0

实际上没有像"./"这样的文件来处理网络服务器。必须有一个默认文件将被提供给客户端。因为没有人想输入"blabla.com/index.aspx"而不是"blabla.com"。你的问题是选择将哪个页面作为默认页面。

在IIS中,右键单击您的网站并转至属性。

有一个选项卡,其中包含“默认页面”顺序。必须有几个网页,如“index.htm,default.aspx等”。更改这些文件名的顺序。您想要调用的页面必须位于顶部。

PS:您的登录页面和登录页面是相同的页面!所以它会被称为冗余!

+0

我认为你误解了我:我的应用程序设置正确,以便http:// blah/myapp /进入我的default.aspx。我只是想让身份验证在重定向时不会将/default.aspx冗余放置。 – Chris 2010-08-24 01:22:53

+0

仅仅是因为没有显示文件名“default.aspx”? 因为你的代码与认证无关。您只需说出URL是否以“default.aspx”结尾,然后转到“./”将您重定向到相同的位置。 – 2010-08-24 01:42:56

+0

当他第一次访问他的网站时,它不会在URL中显示default.aspx,这很好 - 默认页面设置正确。但是,login.aspx页面的查询字符串参数是?ReturnURL = default.aspx。一旦用户登录,它们将返回到主页,但由于此原因,default.aspx位于URL中。这是海报想要避免的。 – Tommy 2010-08-24 01:59:45

0

这不是一个冗余的重定向。

为什么?因为当你在网络服务器上/在/ web服务器上,网络服务器无论如何都会将你重定向到/default.aspx。你只是让IIS做它而不是认证机制。

-Oisin

+0

为了搜索引擎优化和更清晰的网址,我更喜欢这种方式。 – Chris 2010-08-24 01:48:09

+0

SEO?这不是搜索引擎的入口 - 它是一个登录页面。 – x0n 2010-08-24 02:58:44

1

解决这个问题的最简单的方式就是从web.config

<authentication mode="Forms"> 
    <forms ... defaultUrl="default.aspx" ... /> 
</authentication> 

当您访问删除defaultUrl属性www.yourwebsite.com/myapp,返回的URL将是“/ myapp /”,登录后,它将重定向回“/ myapp /”。如果使用上面的defaultUrl,它将重定向到“/myapp/default.aspx”。实际上,我在网站的根目录上对此进行了实验,但我认为它对子目录来说是一样的。

+0

这个*真的*工作吗?如果是这样,那听起来太好了,而不是真的。 – Chris 2010-10-18 21:39:02

+0

我已经证实它可以在根路径上工作,但它是子目录上的catch-22。如果在子目录中有一个default.aspx(并假设它在IIS中作为默认页面进行安装),则它将ReturnUrl更改为“/myapp/default.aspx?”。如果您没有default.aspx,则ReturnUrl将为“/ myapp /”,但登录后将导致目录列表页面。 :/ – 2010-10-19 23:30:19

0

我遇到了同样的问题。我的登录页面是default.aspx,当你点击应用程序时,重定向网址被设置为/ MyApp /。

我认为最终的结果是,我有我的登录页面重命名为soemthing别人(的login.aspx)

相关问题