URL重写模式以删除URL末尾的尾随点(..)



当在url末尾添加三个点时,我的MVC站点的路由出现问题,显示的是标准的ASP.Net 404错误,但我希望它能路由到我们的自定义错误页面。

"/"应用程序中的服务器错误。

找不到资源。

描述:HTTP 404。您正在查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下URL并确保拼写正确。

请求的URL:/ABC/床垫/…/

据我所知,它甚至没有进入MVC。我认为服务器认为这是一个问题,它正在以我们不希望的方式处理它。我不知道如何解决这个问题,这样我就可以将这个url路由到我们的自定义错误页面。

我尝试过的东西:

routes.MapRoute("MyRoute", "abc/{Keyword}", new { controller = "KeywordSearch", action = "Index", Keyword = UrlParameter.Optional});
routes.MapRoute("MyRouteCatchAll", "abc/{Keyword}/{*CatchAll}", new { controller = "Base", action = "NotFound", Keyword = UrlParameter.Optional, CatchAll = UrlParameter.Optional });
routes.MapRoute("CatchAll", "{*catchAll}", new { controller = "KeywordSearch", action = "NotFound" });

我也尝试过使用URL重写。也许正则表达式是错误的。

<rule name="trailingdots" enabled="true" stopProcessing="true">
      <match url="abc/([_0-9a-z-]+)/^([^.]+)$" />
      <action type="Redirect" url="sr/{R:1}/" />
    </rule>

我无计可施。我在任何地方都找不到任何信息来处理这种情况。

任何帮助都将不胜感激。

更新:我能够得到一个URL重写规则(s)工作

<rule name="RemoveDotsAndSlash" stopProcessing="true">
      <match url="(.*)/.../$" />
      <action type="Rewrite" redirectType="Permanent" url="{R:1}" />
    </rule>
    <rule name="RemoveDots" stopProcessing="true">
      <match url="(.*)/...$" />
      <action type="Rewrite" redirectType="Permanent" url="{R:1}" />
    </rule>

但我想让这样的东西发挥作用,但它仍然需要我进入通用的404页面:

<rule name="RemoveTrailingDotsAndSlash" stopProcessing="true">
      <match url="^(.*)$" />
      <conditions logicalGrouping="MatchAny">
        <add input="{REQUEST_URI}" pattern="^(.*)/.../$" />
    <add input="{REQUEST_URI}" pattern="^(.*)/...$" />
      </conditions>
      <action type="Redirect" redirectType="Permanent" url="{R:1}" />
    </rule>

关于我离得到我想要的东西有多近,有什么想法吗?

感谢

您不需要用模式删除它。如果将以下标记添加到web.config,则可以使用自定义错误重定向到默认错误页面:

<system.web>    
  <httpRuntime relaxedUrlToFileSystemMapping="true"/> 
  <customErrors mode="On" defaultRedirect="error.aspx">
     <error statusCode="404" redirect="notFound.aspx" />
  </customErrors>
    [ ...]
</system.web>

在文档中,解释是设置relatedUrlToFileSystemMapping=true相当于允许URL中的无效Windows路径,然后它重定向到404错误,我们可以捕捉到它。

最新更新