IIS重写规则的行为不符合预期

时间:2013-02-04 01:07:29

标签: iis url-rewriting reverse-proxy

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

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

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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分: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设置规则,如下所示:rules

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/googleChrome

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

答案 1 :(得分:1)

我在这方面已经挣扎了好几天。我试过的10-20重写规则和失败的原因是:

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

  2. IIS中的站点应该有效(没有来自解冻/启用verisign的网站的文件复制粘贴,甚至是snk.exe生成的自签名)证书;请不要认为没有有效证书就可以。 (IIS 8和10中的自签名(也称为开发证书)为我工作;购买和自签名之间的差异为here)。应安装证书,因为IIS可以有多个证书,但每个网站都应使用自己的单独证书。

  3. 网站绑定应包含http(80)和https(443)

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

  5. 还必须考虑故事的另一方面,可以使用Global.asax-&gt; Application_BeginRequest或MVC 4/5中的ActionFilter来处理重定向。

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

  6. 我遇到的另一个问题是重定向来自http-&gt; https工作正常,但我无法从https-&gt; http;

  7. 回来
  8. 考虑您的场景(通常不应该混合)可用的选择

    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)
    
  9. 是否需要HttpRedirect或UrlRewrite

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