正则表达式从 URL 中提取一部分并将其用作 url 重写中的参考
Regex to extract a part out of a URL and use it as a reference in url rewrite
好的,我想知道是否有人可以帮助我尝试编写正则表达式。
基本上,如果用户访问另一个站点上的 URL,我想做的是使用 IIS urlrewrite 模块重定向到特定的 URL。唯一的问题是我还必须捕获一些查询字符串,并将其移动到重定向中。我想我确实有正确的正则表达式,但它在我的 web.config 中实现它导致了问题。
所以这里是输入,用户可以访问的 URL 看起来像:
https://of.example.com/sfsv3.aspx?waform=pro&language=en
我想匹配 URL(http 或 https,不区分大小写),并从中捕获一条信息,即两个字母的语言代码。然后 url 我想转发给用户看起来像:
(其中 en 被我上面捕获的任何内容替换)
所以,我正在使用 IIS 重写模块,并且我已经获得了我的输入数据和正则表达式,到目前为止我拥有的正则表达式模式是这样的:
https?://of.example.com/sfsv3.aspx\?waform=pro&(language=(..))
所以基本上我匹配整个字符串,加上一个组和一个子组用于语言及其代码。在 IIS 测试模式对话框中,这是有效的。
我得到以下内容
{R:1} 语言=en
{R:2} zh
太棒了!那么我的 IIS 重写规则应该如下所示以重定向用户:
<system.webServer>
<rewrite>
<rules>
<rule name="test" stopProcessing="true" enabled="true">
<match url="https?://of.example.com/sfsv3.aspx\?waform=pro&(language=(..))" ignoreCase="true" />
<action type="Redirect" url="http://www.example.com/ca/{R:2}/ppf" />
</rule>
</rules>
</rewrite>
</system.webServer>
这一切对我来说似乎都是正确的。但是,IIS 犹豫不决,说我的 web.config 无效。具体来说,它说 "Entity '(' is not defined" 并且它指向 ( 就在语言之前作为问题。所以,在我修复它之前我无法构建或部署这个应用程序。如果我在没有构建它的情况下然后尝试删除它进入 web.config,我在加载网站时遇到错误:
HTTP 错误 500.19 - 内部服务器错误
请求的页面无法访问,因为该页面的相关配置数据无效。
谁能帮我弄清楚如何正确地将捕获组放入重写规则中?
您忘记对“&”符号进行编码。应该是:
<system.webServer>
<rewrite>
<rules>
<rule name="test" stopProcessing="true" enabled="true">
<match url="https?://of.example.com/sfsv3.aspx\?waform=pro&(language=(..))" ignoreCase="true" />
<action type="Redirect" url="http://www.example.com/ca/{R:2}/ppf" />
</rule>
</rules>
</rewrite>
好的,我想知道是否有人可以帮助我尝试编写正则表达式。
基本上,如果用户访问另一个站点上的 URL,我想做的是使用 IIS urlrewrite 模块重定向到特定的 URL。唯一的问题是我还必须捕获一些查询字符串,并将其移动到重定向中。我想我确实有正确的正则表达式,但它在我的 web.config 中实现它导致了问题。
所以这里是输入,用户可以访问的 URL 看起来像:
https://of.example.com/sfsv3.aspx?waform=pro&language=en
我想匹配 URL(http 或 https,不区分大小写),并从中捕获一条信息,即两个字母的语言代码。然后 url 我想转发给用户看起来像:
(其中 en 被我上面捕获的任何内容替换)
所以,我正在使用 IIS 重写模块,并且我已经获得了我的输入数据和正则表达式,到目前为止我拥有的正则表达式模式是这样的:
https?://of.example.com/sfsv3.aspx\?waform=pro&(language=(..))
所以基本上我匹配整个字符串,加上一个组和一个子组用于语言及其代码。在 IIS 测试模式对话框中,这是有效的。
我得到以下内容
{R:1} 语言=en
{R:2} zh
太棒了!那么我的 IIS 重写规则应该如下所示以重定向用户:
<system.webServer>
<rewrite>
<rules>
<rule name="test" stopProcessing="true" enabled="true">
<match url="https?://of.example.com/sfsv3.aspx\?waform=pro&(language=(..))" ignoreCase="true" />
<action type="Redirect" url="http://www.example.com/ca/{R:2}/ppf" />
</rule>
</rules>
</rewrite>
</system.webServer>
这一切对我来说似乎都是正确的。但是,IIS 犹豫不决,说我的 web.config 无效。具体来说,它说 "Entity '(' is not defined" 并且它指向 ( 就在语言之前作为问题。所以,在我修复它之前我无法构建或部署这个应用程序。如果我在没有构建它的情况下然后尝试删除它进入 web.config,我在加载网站时遇到错误:
HTTP 错误 500.19 - 内部服务器错误 请求的页面无法访问,因为该页面的相关配置数据无效。
谁能帮我弄清楚如何正确地将捕获组放入重写规则中?
您忘记对“&”符号进行编码。应该是:
<system.webServer>
<rewrite>
<rules>
<rule name="test" stopProcessing="true" enabled="true">
<match url="https?://of.example.com/sfsv3.aspx\?waform=pro&(language=(..))" ignoreCase="true" />
<action type="Redirect" url="http://www.example.com/ca/{R:2}/ppf" />
</rule>
</rules>
</rewrite>