2009-01-07 102 views
12

我的默认文档是在子文件夹不在根目录我怎么能使它在asp.net 2.0网站的默认。asp.net网站在子文件夹中的默认文档

尝试将iis7的默认文档设置为'/pages/default.aspx' '〜/ pages/default.aspx',但没有奏效。

+0

如果您发现如果您尝试指定默认文档(如“子文件夹/子文件夹/文件”),将会找到并投放内容,但所有链接都已损坏,因为Web浏览器仍然认为它位于原始父级夹。正确执行此操作的唯一方法是使用HTTP重定向,无论是通过JavaScript还是通过Web服务器响应。触发重定向响应IMO的最好方法是通过web.config中的位置标记来触发重定向,仅针对根中的默认文档,而不是整个打开文件夹的重定向。 – Triynko 2013-05-08 23:22:09

+0

只需将default.aspx文件留在根文件夹中,并在web.config文件中,使用“位置”标签进行特定于该页面的重定向,如下所示:`<系统。webServer>' – Triynko 2013-05-08 23:24:03

回答

15

默认文档与起始页不一样。默认文档意味着如果我请求mysite.com/somefolder并且没有指定文件,那么IIS应该显示哪个文件。

如果要使用特定的页面为主页,创建一个Default.aspx的文件,并在写这个的代码隐藏类:

public override void ProcessRequest(HttpContext context) { 
    context.Response.Redirect("pages/default.aspx", true); 
} 

由于客户可能已经禁用了JavaScript,服务器端方法会更可靠。但最好是发出永久重定向,而不是简单的Response.Redirect。从SEO的角度来看,使用JS做它也是不好的。

+0

做代码隐藏是时间不必要的拖延 - 只需一行JavaScript即可。 – 2009-01-07 20:11:40

2

默认文档是子文件夹特定的东西 - 你试图做的不会(直接)工作。在根中设置一个default.htm文件,并将其刷新到您的真正“主页”。

你应该问的更好的问题是你的主页如何在根目录下出现。

8

您不需要创建一个虚拟的Default.aspx页面。

在你的Global.asax.cs文件,写入以下内容:

public void Application_Start(object sender, EventArgs e) 
{ 
    var routeCollection = RouteTable.Routes; 
    routeCollection.MapPageRoute("DefaultRoute", string.Empty, "~/YourDesiredSubFolder/YourDesiredDocument.aspx"); 
} 

说明:

  • 的Application_Start代码是保证在应用程序启动一次且只运行一次。
  • 第一行代码获取应用程序的URL路由集合。
  • 第二行代码定义了一个指向您想要的子文件夹中的内页的新路由。
  • 第二个参数是空的,表示在没有请求特定页面且没有默认文档存在时使用此路由。