【问题标题】:Add trailing slash to applications path if one does not exist, C# app running on IIS如果应用程序路径不存在,则在应用程序路径中添加斜杠,在 IIS 上运行的 C# 应用程序
【发布时间】:2016-11-17 10:03:03
【问题描述】:

我知道这可以通过 URL 重写来完成,但这是一台客户机器,除非他们真的需要,否则他们不想安装扩展程序。该应用程序在原始域名下的文件夹中运行,如下所示:

domain.com/app1

如果向domain.com/app1 发出请求,我不希望它被永久重定向到domain.com/app1/

应用程序和 IIS:

  • .NET Framework 4.5
  • IIS 7.0

不得已的示例规则:

<rule name="Add trailing slash" stopProcessing="true">
  <match url="(.*[^/])$" />
  <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  </conditions>
  <action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>

【问题讨论】:

  • 出于好奇,为什么?在 RFC 1738 下,斜杠只能用作路径组件分隔符,作为终结符(您建议的用途)它们是没有意义的:stackoverflow.com/questions/5948659/… - 您所提议的只会添加额外的 HTTP 重定向,这会增加用户延迟 -操作并最终损害用户体验。
  • 还有一个风险是不符合标准的 UA(其中有 很多 个)可能会截断它发出的任何请求中的任何尾部斜杠,从而陷入困境无限重定向循环。请不要这样做。
  • @Dai 一个非常有效的问题。这是由于我们正在使用的 Angular 的当前配置。如果从子目录运行应用程序时未添加尾部斜杠,则角度路由将进入无限循环,调用不存在的路由。无论如何都不理想,但情况就是这样。

标签: c# asp.net iis


【解决方案1】:

用这个方法在Global.asax解决了:

protected void Application_BeginRequest()
{
    if (Request.ApplicationPath != "/" && Request.ApplicationPath.Equals(Request.Path, StringComparison.CurrentCultureIgnoreCase))
    {
        var redirectUrl = VirtualPathUtility.AppendTrailingSlash(Request.ApplicationPath);
        Response.RedirectPermanent(redirectUrl);
    }
}

【讨论】:

    猜你喜欢
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多