header_checks
только позволяет Вам изменить ту же часть, которой Вы соответствуете в регулярном выражении, по крайней мере, это - то, что я вижу во всех конфигурациях.
Пример: Если Вы соответствуете регулярному выражению как это
/^Subject: ($1).* / REPLACE Subject:
Только можно сменить ТЕМУ заголовка, Вы наклоняетесь', кладет часть предмета на другое место заголовка.
Я обнаружил гораздо более простой способ сделать то же самое (по крайней мере, на данный момент) с помощью с помощью специальной формы поиска в моей теме . Я уверен, что эта проблема возникнет в какой-то момент в будущем, но пока это единственный поиск нужного веб-сайта, он будет работать. Я полагаю, что есть способ разрешить несколько форм поиска так же, как вы можете иметь несколько страниц архива категорий (например, searchform- [slug] .php
), так что поэкспериментирую с этим позже.
Мне все еще интересно узнать, как что-то подобное может быть выполнено с помощью IIS, однако >> это решение << решило мою проблему.
Мне жаль, что я сообщаю вам плохие новости, но ваше правило перезаписи ничего для вас не делает. Регулярное выражение в теге
недопустимо. Прежде всего, строка запроса не является частью URL-адреса, и чтобы соответствовать ?
в регулярном выражении, вы должны использовать \?
, поскольку ?
имеет специальное значение в регулярных выражениях.
А также синтаксис в вашем переписанном URL
недействителен. Вы не можете использовать $ 1
для обратной ссылки, но должны использовать {R: x}
(для обратных ссылок на URL) или {C: x}
( для обратных ссылок на условия), где x
- номер части регулярного выражения, на которую вы хотите ссылаться.
К сожалению, это ' Мне не совсем понятно, чего вы пытаетесь достичь. Я предполагаю, что вы пытаетесь переписать все запросы, начинающиеся с s =
в строке запроса, на / blog /? S =
. В этом случае это правило должно делать следующее:
<rule name="Rewrite search queries" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{QUERY_STRING}" pattern="^s=([^&.]*)&?" />
</conditions>
<action type="Rewrite" url="blog/?s={C:1}" appendQueryString="false" />
</rule>
Для простоты s =
должен быть первым параметром строки запроса.
Если вы хотите что-то сделать в противном случае отредактируйте свой вопрос и приведите еще несколько примеров URL-адресов и того, как их нужно будет переписать.
Обновление: Если вам нужна форма поиска для использования site.com/blog/?s =
вместо site.com/?s=
, почему бы просто не изменить HTML-код формы поиска? Просто измените действие
этой формы.
Чтобы указанное выше правило работало вместе с правилами перезаписи WordPress, вам нужно немного изменить его. Прежде всего вам нужно удалить stopProcessing = "true"
и для безопасности изменить url
и добавить начальную косую черту. Возможно, в этом нет необходимости, просто на всякий случай.
Таким образом, правилом перезаписи станет:
<rule name="Rewrite search queries">
<match url=".*" />
<conditions>
<add input="{QUERY_STRING}" pattern="^s=([^&.]*)&?" />
</conditions>
<action type="Rewrite" url="/blog/?s={C:1}" appendQueryString="false" />
</rule>
И убедитесь, что это правило выше правил перезаписи WordPress. Правила WordPress должны быть последними.