2011-06-14 43 views
2

我正在使用Managed Fusion URL重寫器,迄今爲止它一直很棒。 現在我只需要確保查詢字符串在代理網站的URL中傳遞。 我需要通過CODE = 777在每次調用,所以我有代碼如下:URL重寫器Managed Fusion strip a QueryString

RewriteRule ^(.*) http://www.somewebsite.com/$1?CODE=777[P, QSA,I,L] 

但是我需要剝去前手查詢字符串。所以我用下面的代碼:

RewriteCond %{QUERY_STRING} ^CODE=([0-9]+)+$ 
RewriteRule ^(.*) http://www.somewebsite.com/$1? [P, QSA] 
RewriteRule ^(.*) http://www.somewebsite.com/$1?CODE=777[P, QSA,I,L] 

但是,當我與另外的查詢字符串重定向如下面

http://proxyserver.com?othercode=something 

任何想法如何剝離特定的查詢字符串,不刪除查詢字符串paramters失敗?

回答

0

我從Managed Fusion下載了源代碼並將該項目添加到了我的解決方案中。

我搜索了一下,發現這段代碼附加了QueryString。我通過添加一個新方法來刪除查詢字符串代碼並添加一個固定的代碼來更新代碼。

我還添加了一個設置來控制分配給CODE的FIXED值。

private Uri AppendQueryString(Uri substituedUrl, Uri existingUrl) 
    { 
     string append = existingUrl.Query.TrimStart('?'); 

     if (!String.IsNullOrEmpty(append)) 
     { 
      UriBuilder builder = new UriBuilder(substituedUrl); 

      if (String.IsNullOrEmpty(builder.Query) || builder.Query == "?") 
       builder.Query = append; 
      else 
       builder.Query = builder.Query.TrimStart('?') + "&" + append; 

      return AppendFixedQueryString(builder.Uri, existingUrl); 
     } 

     return AppendFixedQueryString(substituedUrl, existingUrl); 
    } 

添加了新的方法

private Uri AppendFixedQueryString(Uri substituedUrl, Uri existingUrl) 
    { 
     string append = string.Format("CODE={0}", Settings.Default.CODE); 


     if (!String.IsNullOrEmpty(append)) 
     { 
      UriBuilder builder = new UriBuilder(substituedUrl); 
      builder.Query = Regex.Replace(builder.Query, @"CODE=([0-9]+)", String.Empty); 
      if (String.IsNullOrEmpty(builder.Query) || builder.Query == "?") 
       builder.Query = append; 
      else 
       builder.Query = builder.Query.TrimStart('?').Trim("&".ToCharArray()) + "&" + append; 
      return builder.Uri; 
     } 
     return substituedUrl; 
    } 

利用這種改進。即使用戶在URL上明確輸入CODE = 123,它也會被忽略,並且固定的CODE值將被分配