2011-01-31 109 views
0

我想重写URL在我的IIS 7.0服务器使用URL重写模块,但它不工作。URL重写:服务器不重写

我必须建立一个规则,用于从第三方认证页面接收URL,并在调用我的页面时使用“; jsessionid = null”标记来引发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. 

没有令牌(URL手动rewriten),它会是好吧。

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

谢谢!

回答

2

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

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

+0

它的工作原理!就是这样...我将规则更改为“(。*); jsessionid = null(。*)”,现在模块正确地重写URL。问题在于HTTP。 – Alex 2011-02-01 12:36:45