URL Rewriter управляемый Fusion удаляет строку запроса

#url #mod-rewrite #urlrewriter #managedfusion

#url #переписать мод #urlrewriter #управляемое слияние

Вопрос:

Я использую управляемый 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:

Я скачал исходный код из Managed Fusion и добавил проект в свое решение.

Я искал и нашел этот фрагмент кода ниже, который добавляет строку запроса. Я обновил код, добавив новый метод для удаления КОДА querystring и добавления ИСПРАВЛЕННОГО.

Я также добавил настройку для управления ФИКСИРОВАННЫМ значением, присвоенным КОДУ.

   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('?')   "amp;"   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("amp;".ToCharArray())   "amp;"   append;
            return builder.Uri;
        }
        return substituedUrl;
    }
  

С помощью этой модификации. даже если пользователь явно введет CODE= 123 в URL, он будет просто проигнорирован и будет присвоено фиксированное значение кода