RewriteCond
правила обрабатываются как соединение (набор выражений and
) до директивы RewriteRule
.
Директива
blockquote>RewriteCond
определяет условие правила. ДирективеRewriteRule
может предшествовать один или несколькоRewriteCond
. Следующее правило используется только в том случае, если текущее состояние URI совпадает с его шаблоном, и , если эти условия соблюдены.Следовательно, их необходимо поместить перед RewriteRule:
RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC] RewriteCond ... RewriteCond ... RewriteCond ... RewriteCond ... RewriteRule ^(.*)$ https://example.com%{REQUEST_URI} [E=UPGRADE,L,R=301]
Возможно, вы могли бы использовать класс System.UriBuilder
. Он имеет свойство Query
.
Я согласен с Серебром. Придерживаясь принципа KISS, у вас есть строка запроса,
string querystring = myURI.Query;
вы знаете, что ищете и чем хотите ее заменить.
Поэтому используйте что-то вроде этого: -
if (querystring == "")
myURI.Query += "?" + replacestring;
else
querystring.replace (searchstring, replacestring); // not too sure of syntax !!
Нет, в каркасе нет ни одного существующего класса QueryStringBuilder, но обычно в запросе HTTP доступна информация строки запроса в качестве итерируемого и доступного для поиска NameValueCollection
через свойство Request.Querystring
.
Поскольку вы начинаете с объекта Uri
, вам потребуется получить часть строки запроса, используя свойство Query
объекта Uri
. Это приведет к строке вида:
Uri myURI = new Uri("http://www.mywebsite.com/page.aspx?Val1=A&Val2=B&Val3=C");
string querystring = myURI.Query;
// Outputs: "?Val1=A&Val2=B&Val3=C". Note the ? prefix!
Console.WriteLine(querystring);
Затем вы можете разбить эту строку на символ амперсанда, чтобы дифференцировать ее на разные пары параметров-значений строки запроса. Затем снова разделите каждый параметр на символ "=", чтобы разделить его на ключ и значение.
Я недавно ответил на аналогичный вопрос . По сути, наилучшим способом было бы использование класса HttpValueCollection
, которым на самом деле является свойство QueryString
, к сожалению, оно является внутренним в среде .NET.
Вы можете использовать Reflector, чтобы захватить его (и поместить в свой класс Utils). Таким образом, вы можете манипулировать строкой запроса, как NameValueCollection, но с учетом всех проблем кодирования / декодирования URL.
HttpValueCollection
расширяет NameValueCollection
и имеет конструктор, который принимает кодированный строка запроса (включая амперсанды и знаки вопроса), и она переопределяет метод ToString ()
для последующего перестроения строки запроса из базовой коллекции.