【问题标题】:asp.net site default document in subfolder子文件夹中的 asp.net 站点默认文档
【发布时间】:2009-01-07 19:43:48
【问题描述】:

我的默认文档位于子文件夹中,而不是根目录中,如何在 asp.net 2.0 网站中将其设为默认。

尝试将 iis7 默认文档设置为“/pages/default.aspx” '~/pages/default.aspx' 但它不起作用。

【问题讨论】:

  • 如果发现如果你尝试指定一个默认的文档,比如“子文件夹/子文件夹/文件”,内容会被找到并提供,但是所有的链接都被破坏了,因为网络浏览器仍然认为它在原始父文件夹。正确执行此操作的唯一方法是使用 HTTP 重定向,通过 JavaScript 或通过 Web 服务器响应。 IMO 触发重定向响应的最佳方式是通过 web.config 中的位置标记,该标记仅针对根目录中的默认文档触发重定向,而不是为整个文件夹打开重定向。
  • 只需将根文件夹中的 default.aspx 文件留空,然后在您的 web.config 文件中,使用“位置”标签进行特定于该页面的重定向:<configuration><location path="default.aspx"><system.webServer><httpRedirect enabled="true" destination="pages/default.aspx" exactDestination="true" httpResponseStatus="Found" /></system.webServer></location></configuration>跨度>

标签: asp.net iis-7


【解决方案1】:

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

如果您想使用特定页面作为主页,请创建一个 Default.aspx 文件并将其写入它的代码隐藏类中:

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

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

【讨论】:

  • 使用代码隐藏是不必要的拖累时​​间 - 只需要一行 JavaScript。
  • 如果你想避免使用 JS,HTML 元刷新是另一种简单的纯 HTML 解决方案。
  • 这是正确的解决方案。这里的目标不是为所有文件夹打开 http 重定向,而是确保如果人们访问该文件夹,他们会被重定向到子文件夹中的特定文档。由于它们没有针对特定文档,因此您必须允许在原始文件夹中调用默认文档(设置像“subfolder/default.aspx”这样的默认文档将提供文件但会破坏链接,因为浏览器仍然会认为它在父文件夹中),然后仅针对该默认文档,让它触发重定向。除了 JavaScript,就是这样。
  • 更好的是,您可以在此处执行完全相同的操作,而无需编写任何代码。不要将该 ProcessRequest 处理程序放在您的 default.aspx 页面中,只需将 default.aspx 留空,然后在您的 web.config 文件中,使用如下所示的“位置”标签进行特定于该页面的重定向:<configuration><location path="default.aspx"><system.webServer><httpRedirect enabled="true" destination="pages/default.aspx" exactDestination="true" httpResponseStatus="Found" /></system.webServer></location></configuration>
【解决方案2】:

您不需要创建一个虚拟的 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 路由集合。
  • 第二行代码定义了一个新路由,指向您希望的子文件夹中的内页。
  • 第二个参数为空表示在没有请求特定页面且不存在默认文档时使用此路由。

【讨论】:

  • 在我的开发环境(VS2015CE)中RouteTable.Routes不是类型而是属性,所以它是RouteTable.Routes .MapPageRoute("DefaultRoute", string.Empty, "~/YourDesiredSubFolder/YourDesiredDocument. aspx");
【解决方案3】:

默认文档是特定于子文件夹的东西 - 您尝试执行的操作不会(直接)起作用。在根目录下设置一个 default.htm 文件,让它刷新到你真正的“主页”。

您应该问的更好的问题是您的主页到底是如何脱离根目录的。

【讨论】:

    【解决方案4】:

    理论上,您可以在目录中拥有一个 Web.config 文件并使用defaultDocument element 设置默认文档。见这里:https://stackoverflow.com/a/2012079/125938.
    不幸的是,我无法让它自己在本地工作,但 might be 因为 Visual Studio 开发服务器不支持它。

    【讨论】:

      【解决方案5】:

      假设“index.html”是您想要的默认页面,它存在于“Public”子文件夹中。

      不要将“/Public/index.html”指定为默认站点,而是尝试“Public/index.html”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-14
        • 2011-01-01
        • 2015-01-07
        • 1970-01-01
        • 1970-01-01
        • 2015-11-22
        • 1970-01-01
        相关资源
        最近更新 更多