#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, он будет просто проигнорирован и будет присвоено фиксированное значение кода