Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex IIS7 URL重写模块替换_Regex_Iis_Iis 7_Url Rewriting - Fatal编程技术网

Regex IIS7 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(.*)

我真的很喜欢IIS7 URL重写模块,到目前为止,它对我来说非常有效

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

因此:

应重定向到以下位置:


即使只有正则表达式也能做到这一点吗?

没有办法直接做您想要做的事情

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

^(.*)%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重写器了,这是另一件需要维护的事情?我也有同样的问题,正在寻找解决办法。不,没有简单的方法。我同意公认的答案。