【问题标题】:URL rewriting: server don't rewritesURL重写:服务器不重写
【发布时间】:2011-01-31 19:22:01
【问题描述】:

我正在尝试使用 URL 重写模块在我的 IIS 7.0 服务器中重写 URL,但它不起作用。

我必须建立一个规则,以便从带有“;jsessionid=null”标记的第 3 部分验证页面接收 URL,该标记在调用我的页面时会在 IIS 中引发错误。我试图只删除“;jsessionid=null”语句。我需要我的应用程序的 URL 查询语句 (preceeding question)。

我写了这条规则:

图案:

(http://.*);jsessionid=null(.*)

行动:

{R:1}{R:2}

当我测试模式时,结果是好的。但在实践中,什么都没有发生,就像没有重写模块一样。在Web.config文件中好像没问题:

  <system.webServer>
      <modules runAllManagedModulesForAllRequests="true" />
        <rewrite>
            <rules>
                <rule name="refazer_url_autenticador_df" enabled="true" patternSyntax="ECMAScript" stopProcessing="false">
                    <match url="(http://.*);jsessionid=null(.*)" />
                    <action type="Rewrite" url="{R:1}{R:2}" logRewrittenUrl="true" />
                </rule>
            </rules>
        </rewrite>
  </system.webServer>

当令牌在 URL 中时,IIS 会引发错误:

404 - File or directory not found.

    The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.

不用token(手动改写URL),一切正常。

怎么了?也许是规则,也许是另一个 ISS 配置?

谢谢!

【问题讨论】:

    标签: iis-7 url-rewriting


    【解决方案1】:

    您应该使用失败的请求跟踪来更好地了解正在发生的事情,尤其是您应该在测试模式 UI 中测试的实际值。见:Failed Request Tracing for URL Rewrite

    我猜发生的事情是 Match 中的 URL 永远不会包含 HTTP 协议,而是从站点的根目录开始。另外,JSessionid 是查询字符串的一部分吗?如果是,那么您需要使用 Condition 来捕获条件中的 QUERY_STRING。最后确保最终结果只包含从站点 / 的根目录开始的 URL,而不是 HTTP。这仅在路由到不同的服务器/应用程序池时才需要,但需要在机器中安装应用程序请求路由 (ARR)。

    【讨论】:

    • 有效!就是这样...我已将规则更改为“(.*);jsessionid=null(.*)”,现在模块正在正确地重写 URL。问题是 HTTP。
    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 2011-12-19
    • 2011-12-21
    • 2012-01-25
    • 2017-03-07
    相关资源
    最近更新 更多