URL重写器托管Fusion剥离QueryString

时间:2011-06-14 07:06:14

标签: url mod-rewrite urlrewriter managedfusion

我正在使用Managed Fusion URL Rewriter,到目前为止它已经很棒了。 现在我只需要确保从代理网站的URL传递查询字符串。 我需要在每次通话时传递CODE = 777,所以我有以下代码:

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

任何想法如何在不删除所有查询字符串参数的情况下剥离特定的查询字符串?

1 个答案:

答案 0 :(得分:0)

我从Managed Fusion下载了源代码,并将项目添加到我的解决方案中。

我搜索并发现下面的代码附加了QueryString。我通过添加一个新方法来删除查询字符串CODE并添加一个固定的代码来更新代码。

我还添加了一个设置来控制分配给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值