Объект замены в querystring

RewriteCond правила обрабатываются как соединение (набор выражений and) до директивы RewriteRule .

Директива RewriteCond определяет условие правила. Директиве RewriteRule может предшествовать один или несколько RewriteCond. Следующее правило используется только в том случае, если текущее состояние URI совпадает с его шаблоном, и , если эти условия соблюдены.

blockquote>

Следовательно, их необходимо поместить перед 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]

14
задан Brian 21 April 2009 в 12:12
поделиться

5 ответов

Возможно, вы могли бы использовать класс System.UriBuilder . Он имеет свойство Query .

3
ответ дан 1 December 2019 в 05:50
поделиться

Я согласен с Серебром. Придерживаясь принципа KISS, у вас есть строка запроса,

string querystring = myURI.Query; 

вы знаете, что ищете и чем хотите ее заменить.

Поэтому используйте что-то вроде этого: -

if (querystring == "") 
  myURI.Query += "?" + replacestring; 
else 
  querystring.replace (searchstring, replacestring); // not too sure of syntax !!
1
ответ дан 1 December 2019 в 05:50
поделиться

Нет, в каркасе нет ни одного существующего класса 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);

Затем вы можете разбить эту строку на символ амперсанда, чтобы дифференцировать ее на разные пары параметров-значений строки запроса. Затем снова разделите каждый параметр на символ "=", чтобы разделить его на ключ и значение.

3
ответ дан 1 December 2019 в 05:50
поделиться

Я недавно ответил на аналогичный вопрос . По сути, наилучшим способом было бы использование класса HttpValueCollection , которым на самом деле является свойство QueryString , к сожалению, оно является внутренним в среде .NET. Вы можете использовать Reflector, чтобы захватить его (и поместить в свой класс Utils). Таким образом, вы можете манипулировать строкой запроса, как NameValueCollection, но с учетом всех проблем кодирования / декодирования URL.

HttpValueCollection расширяет NameValueCollection и имеет конструктор, который принимает кодированный строка запроса (включая амперсанды и знаки вопроса), и она переопределяет метод ToString () для последующего перестроения строки запроса из базовой коллекции.

0
ответ дан 1 December 2019 в 05:50
поделиться

Вы можете ускорить RegExps, предварительно скомпилировав их.

Посмотрите этот урок

-2
ответ дан 1 December 2019 в 05:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: