【问题标题】:URLRewrite IIS 7URL重写 IIS 7
【发布时间】:2010-08-05 08:39:19
【问题描述】:

我正在尝试执行一个简单的 URLRewriting。如果您访问 azamsharp.com,它将进入一些文件夹浏览结构,它应该转到 http://www.azamsharp.com/AzamSharpWebApps/Default.aspx。

我不想在 URL 中看到 AzamSharpWebApps:这是我正在使用的 URL 重写:

 <system.webServer>
    <rewrite>
      <rules>
        <rule name="Virtual Director" enabled="true" stopProcessing="false">
          <match url=".*" />
          <conditions>
            <add input="{MyDomains:{HTTP_HOST}}" pattern="(.+)" />
          </conditions>
          <action type="Rewrite" url="{C:1}{REQUEST_URI}" />
        </rule>
      </rules>
      <rewriteMaps>
        <rewriteMap name="MyDomains">
          <add key="azamsharp.com" value="/AzamSharpWebApps/default.aspx" />
          <add key="www.azamsharp.com" value="/AzamSharpWebApps/default.aspx" />
        </rewriteMap>
      </rewriteMaps>
    </rewrite>

  </system.webServer>

【问题讨论】:

    标签: regex iis-7 url-rewriting


    【解决方案1】:

    我不知道 IIS UrlRewrite 是如何工作的,但在一般的正则表达式级别,您希望将 ^(?!/AzamSharpWebApps).+ 替换为 /AzamSharpWebApps/$0

    ^ 是字符串的开头,(?!..) 是否定前瞻,表示“确保以下文本不是“/AzamSharpWebApps”,然后 .+ 匹配任何字符,直到字符串的结尾。

    在替换方面,$0 表示整个捕获的文本 - 所以基本上正则表达式是说“如果它还没有以“/AzamSharpWebApps”开头,则在它前面加上前缀。

    (您需要尝试在 $0 之前是否需要 /。)

    无论如何,看起来 IIS 使用 {C:0} 而不是 $0,只是为了有所不同,所以我猜它在规则中看起来像这样:

    <match url="^(?!/AzamSharpWebApps).+" />
    <action type="Rewrite" url="/AzamSharpWebApps{C:0}" />
    

    但它可能需要的不仅仅是这些。

    【讨论】:

      猜你喜欢
      • 2013-07-01
      • 2012-12-26
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2012-10-29
      • 2011-08-18
      相关资源
      最近更新 更多