Regex IIS7 URL重写模块替换
我真的很喜欢IIS7 URL重写模块,到目前为止,它对我来说非常有效 有一件事我不知道该怎么做:我想将所有包含编码空格(%20)的URL永久重定向到一个URL,该URL将空格替换为破折号(-) 因此: 应重定向到以下位置:Regex IIS7 URL重写模块替换,regex,iis,iis-7,url-rewriting,Regex,Iis,Iis 7,Url Rewriting,我真的很喜欢IIS7 URL重写模块,到目前为止,它对我来说非常有效 有一件事我不知道该怎么做:我想将所有包含编码空格(%20)的URL永久重定向到一个URL,该URL将空格替换为破折号(-) 因此: 应重定向到以下位置: 即使只有正则表达式也能做到这一点吗?没有办法直接做您想要做的事情 你可能会满足于这样的事情: ^(.*)%20(.*)%20(.*)%20(.*) replaced by: {R:1}-{R:2}-{R:3}-{R:4} ^(.*)%20(.*)%20(.*)
即使只有正则表达式也能做到这一点吗?没有办法直接做您想要做的事情 你可能会满足于这样的事情:
^(.*)%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}
使用ISAPI_Rewrite 3或任何数量的%20,可以在一条规则中实现同样的效果:
RewriteBase /
RewriteRule ^(.*)%20(.*)$ $1-$2 [LP,R=301,L]
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重写模块很棒,但仅仅因为您有一个锤子…您就可以编写自定义重写提供程序来对原始URL执行任何操作。但这不仅仅涉及正则表达式。更多细节。也许我疯了,但这似乎奏效了 使用具有以下模式的正则表达式使用URL_重写规则:
^(.*) (.*)
重定向到
{R:1}-{R:2}
我已经用一个或多个空间对此进行了测试,它对我使用IIS10很好。请注意,它对
%20
的效果与对URL字符串中“
”的效果一样好,干杯。这正是我现在所拥有的(请注意,IIS重写将%20解释为空白):模式:(\w+)\s+(\w+)\s+(\w+)\s+(\w+.aspx)重定向URL:{R:1}-{R:2}-{R:3}-{R:4}效果很好,但我也有类似于%20Us/Blah%20Dah.aspx的路径。我需要一大堆规则来处理所有可能的空格。如果你按2的幂倒计时,而不是按1倒计时,并允许处理后续的规则,你就不需要那么多的规则了。例如,上面的规则将匹配16个空格、8个空格、4个空格、2个空格和1个空格。按该顺序使用时,它们将匹配任意数量的空格(最多31个),并将使用5条规则而不是31条规则进行匹配rules@jproch好主意。我认为@JeremyStein的回答大体上是一个解决令人沮丧问题的好办法。如果您对URL的长度和可能拥有的%20
的数量很现实,那么您可以使用一些易于实现的规则来覆盖所有基础。那么你就不必去写一个定制的请求处理程序/url重写器了,这是另一件需要维护的事情?我也有同样的问题,正在寻找解决办法。不,没有简单的方法。我同意公认的答案。