【问题标题】:iis rewrite url with dot at end of urliis在url末尾用点重写url
【发布时间】:2011-12-11 01:55:11
【问题描述】:

我的网站中有一些外部链接错误地在其末尾添加了句点。 (所以,我无法修复它们)。由于入站链接总是很好,我想将这些链接重定向到合法页面。我在 iis.5 的 urlrewrite 模块中尝试了许多规则,但似乎没有任何东西可以捕获这个 url。

我在这里看到了其他关于 asp.net url 的问题,最后有句点,但我试图在 IIS 重写模块级别捕获这个问题。任何关于使这项工作的指示?

【问题讨论】:

    标签: asp.net asp.net-mvc iis rewrite iis-7.5


    【解决方案1】:

    如果您有一组固定的不正确的入站链接,您可以专注于重定向 URL 的主要部分,而不是点。

    例如,使用此 URL: http://www.example.com/index.html.

    让您的 IIS Rewrite 查找匹配“^index.html.*”的 URL 并重定向到您需要的页面。这应该捕获带有和不带有点的 URL。

    【讨论】:

    • 很确定我已经尝试过了,但我会再试一次。
    【解决方案2】:

    这是一个相当老的问题,但由于我最近遇到了类似的问题,所以我决定发布我的发现......

    我假设在 url-rewrite 模块之前运行的模块之一终止,但有一个例外,阻止请求继续进行 url-rewrite(我怀疑一些安全检查)。因此,无法使用 url-rewrite 解决您的问题。

    一种可能的解决方法是重定向以点 '.' 结尾的请求。在 Global.asax 的早期阶段,就像这里:

    protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
    {
        if (Context.Request.RawUrl.EndsWith(".aspx."))
        {
            //permanent redirect and end current request...
            Context.Response.RedirectPermanent(Context.Request.RawUrl.TrimEnd('.'), true);
        }
    }
    

    这可能远非最佳答案,但至少可以完成工作;)

    【讨论】:

    • 我无权直接修改此资源。这应该在 ASP.NET 2.0 运行时中工作吗?我有一堆旧的 Sharepoint 实例,我正在尝试解决这个问题。
    【解决方案3】:

    我使用了一种在 web.config 级别删除所有尾随点的解决方案:

    <rule name="RemoveTrailingDots" stopProcessing="false">
        <match url="^(.*[^.])\.+$" />
        <action type="Rewrite" url="{R:1}" />
    </rule>
    

    这条规则只是在我的重写规则开始时内部重写了请求url,允许请求通过正常规则处理而不是被上游捕获

    如果您没有更多规则要应用,并且只想重定向任何末尾带有点的内容,只需将操作类型更改为 Redirect(区分大小写)

    【讨论】:

      猜你喜欢
      • 2016-08-29
      • 1970-01-01
      • 2015-12-30
      • 2021-05-05
      • 2016-06-27
      • 2013-06-16
      相关资源
      最近更新 更多