IIS7 URL重写模块替换

时间:2009-06-29 14:56:36

标签: regex iis iis-7 url-rewriting

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

有一件事我不知道该怎么做:我想将所有编码空格(%20)的URL永久重定向到一个用短划线( - )替换空格的URL。

所以这个:

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

应重定向到:

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

只有正则表达式才能实现这一点吗?

5 个答案:

答案 0 :(得分:6)

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

你可能会满足于这样的事情:

^(.*)%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}

答案 1 :(得分:2)

关于.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重写模块很棒,但仅仅因为你有锤子......

答案 2 :(得分:1)

对于任何数量的%20,在ISAPI_Rewrite 3或Helicon Ape的一个规则中可以实现相同的目的:

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

答案 3 :(得分:1)

您可以编写自定义重写提供程序,以使用原始URL进行任何操作。但这不仅仅涉及正则表达式。更多详情here

答案 4 :(得分:0)

也许我很生气,但这似乎有用......

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

^(.*) (.*)

重定向到

{R:1}-{R:2}

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