0

我正在尝试将http://www.domain.com/some/url(.*)(后面的所有内容/url)路由到http://some.other.com/some/url{R:1}(其中 {R:1} 成为匹配 url 中 (.*) 的内容。

我尝试了以下规则和各种变体,但似乎都没有正确重写:

<rule name="Reverse Proxy" stopProcessing="true">
    <match url="^some\/url\/(.*)" />
    <action type="Rewrite" url="http://some.other.com/some/url/{R:1}" />
</rule>

任何帮助是极大的赞赏!

4

2 回答 2

2

您的正则表达式可能是问题所在。
如果您想在之后重定向所有内容,请some/url使用:

<rule name="Reverse Proxy" stopProcessing="true">
    <match url="^some/url(.+)$" />
    <action type="Rewrite" url="http://some.other.com/some/url/{R:1}" />
</rule>

如果您想在之后重定向所有内容some/url/并保留路径,那么您可以使用:

<rule name="Reverse Proxy" stopProcessing="true">
    <match url="^some/url/(.+)$" />
    <action type="Rewrite" url="http://some.other.com/{R:0}" />
</rule>

您可以使用 IIS 测试模式工具轻松测试您的模式。
http://www.iis.net/learn/extensions/url-rewrite-module/testing-rewrite-rule-patterns

编辑

我为测试第二条规则所做的工作:

  • 设置test.com域以重定向到我的服务器(使用主机文件)
  • 使用 IIS 设置规则如下:规则

在文件中给出以下配置web.config

<rule name="test" stopProcessing="true">
    <match url="^some/url/(.+)$" />
    <action type="Rewrite" url="http://www.google.com/{R:0}" />
</rule>
  • 使用http://test.com/some/url/google浏览器访问: 铬合金

它表明 URL 是使用 Google 作为目标重写的,并将首先请求的路径作为参数。

于 2013-02-04T02:34:02.607 回答
1

我为此苦苦挣扎了好几天。我尝试过的10-20重写规则,失败的原因是:

  1. 如果您尝试在 VisualStudio(2012/2013/2015) 中进行重定向,则它无法在实际的 IIS 托管站点中工作,因为 VS 在调试时生成自己的证书(当您在项目属性中指定时)以及权限问题由 VS 处理。

  2. IIS 中的站点应具有有效的(没有从启用 thawte/verisign 的网站复制粘贴文件,甚至没有由 snk.exe 生成的自签名)证书;请不要假设没有有效的证书就可以。(IIS 8 和 10 中的自签名(也称为开发证书)对我有用;购买和自签名之间的区别在这里)。应该安装证书,因为 IIS 可以有多个证书,但每个网站都应该使用自己单独的证书。

  3. 站点绑定应该同时具有 http(80) 和 https(443)

  4. 现在重定向语法出现了;有几个在互联网上;您可以轻松获得正确的正则表达式

  5. 故事的另一面也必须考虑到可以使用 MVC 4/5 中的 Global.asax->Application_BeginRequest 或 ActionFilter 来处理重定向。

    使用 config 或以编程方式进行重定向可能会导致不同的错误(TOO_MANY_REDIRECTS<validation validateIntegratedModeConfiguration="false" /> <modules runAllManagedModulesForAllRequests="true">web.config 中)

  6. 我面临的另一个问题是从 http->https 重定向工作正常,但我无法从 https->http 恢复;

  7. 从可用选择中考虑您的场景(通常不应混合)

    HttpRedirect::
    Request 1 (from client):    Get file.htm
    Response 1 (from server): The file is moved, please request the file newFileName.htm
    Request 2 (from client):    Get newFileName.htm
    Response 2 (from server): Here is the content of newFileName.htm
    
    UrlRewrite::
    Request 1 (from client):     Get file.htm
    URL Rewriting (on server):   Translate the URL file.htm to file.asp
    Web application (on server): Process the request (run any code in file.asp)
    Response 1 (from server):    Here is the content of file.htm (note that the client does not know that this is the content of file.asp)
    

是否需要 HttpRedirect 或 UrlRewrite

https://weblogs.asp.net/owscott/rewrite-vs-redirect-what-s-the-difference

于 2017-07-07T02:15:43.180 回答