【问题标题】:IIS7 URL Rewriting Module ReplaceIIS7 URL 重写模块替换
【发布时间】:2010-11-06 17:23:52
【问题描述】:

我非常喜欢 IIS7 URL 重写模块,到目前为止,它对我来说非常有用。

有一件事我不知道该怎么做:我想将所有包含编码空格 (%20) 的 URL 永久重定向到一个将空格替换为破折号 (-) 的 URL。

所以:

http://www.test.com/About%20Our%20Mission.aspx

应该被重定向到这个:

http://www.test.com/About-Our-Mission.aspx

仅使用正则表达式也可以吗?

【问题讨论】:

  • 你最后解决这个问题了吗?没有一堆规则?我有同样的问题,正在寻找解决方案。
  • 不,没有简单的方法可以做到这一点。我接受了答案。

标签: regex iis iis-7 url-rewriting


【解决方案1】:

没有办法直接做你想做的事。

你可能会接受这样的事情:

^(.*)%20(.*)%20(.*)%20(.*)  replaced by:  {R:1}-{R:2}-{R:3}-{R:4}
^(.*)%20(.*)%20(.*)         replaced by:  {R:1}-{R:2}-{R:3}
^(.*)%20(.*)                replaced by:  {R:1}-{R:2}

【讨论】:

  • 这几乎就是我现在所拥有的(注意 %20 被 IIS Rewrite 解释为空格): Pattern: (\w+)\s+(\w+)\s+(\w+) \s+(\w+.aspx) 重定向 URL:{R:1}-{R:2}-{R:3}-{R:4} 效果很好,但我也有类似 About%20Us/Blah% 的路径20Dah.aspx。我需要一大堆规则来处理所有可能的空间。
  • 如果您按 2 的幂而不是 1 倒计时,您将不需要那么多规则,并允许处理后续规则。例如,上面的规则匹配 16 个空格,然后是 8 个空格,然后是 4,然后是 2,然后是 1。按此顺序使用时,它们将匹配最多 31 个空格,并且将使用 5 个规则来匹配31 条规则
  • @jproch 好主意。我认为@JeremyStein 的回答总体上是解决令人沮丧的问题的好方法。如果您对 url 的长度以及您可能拥有多少个%20s 很现实,那么您可以使用一些易于实施的规则来涵盖所有基础。然后,您不必再编写自定义请求处理程序/ url 重写器,这是另一个需要维护的东西。
【解决方案2】:

对于任意数量的 %20,使用 ISAPI_Rewrite 3 或 Helicon Ape 的一条规则也可以实现同样的效果:

RewriteBase /
RewriteRule ^(.*)%20(.*)$ $1-$2 [LP,R=301,L]

【讨论】:

    【解决方案3】:

    .aspx 的一大优点是用真实代码重写 URL 是多么容易。只需在您网站的 Global.asax 文件中添加一些搜索和替换代码:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        string path = HttpContext.Current.Request.Path;
        // Search and replace, RegEx, etc.
        HttpContext.Current.RewritePath(path);
    }
    

    在 IIS7 上,您必须在 web.config 中添加一些条目来处理重写非 .aspx URL:

    <system.webServer>
        <handlers>
            <clear/>
            <add name="Brands1" path="Brands/*.html" verb="*" type="ASP.global_asax" resourceType="Unspecified"/>
            <add name="Brands2" path="Brands/\?*.html" verb="*" type="ASP.global_asax" resourceType="Unspecified"/>
            <!-- ... -->
    

    IIS7 URL 重写模块很棒,只是因为你有一把锤子……

    【讨论】:

      【解决方案4】:

      您可以编写自定义重写提供程序来对原始 url 进行任何您想要的操作。但这不仅仅涉及正则表达式。更多详情here.

      【讨论】:

        【解决方案5】:

        也许我很生气,但这似乎行得通......

        使用带有此模式的正则表达式使用 URL_Rewrite 规则:

        ^(.*) (.*)
        

        重定向到

        {R:1}-{R:2}
        

        我已经用一个空格或多个空格对此进行了测试,它对我使用 IIS 10 来说效果很好。请注意,它对%20 的效果与对 URL 字符串中的“”的效果一样好,干杯。

        【讨论】:

          猜你喜欢
          • 2010-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-28
          • 2012-03-06
          • 1970-01-01
          • 2012-03-25
          • 2023-03-17
          相关资源
          最近更新 更多