Назад | Перейти на главную страницу

iis 7 переписать URL для результатов поиска

У меня есть перезаписи, работающие для определенных каталогов, но я не могу понять, как заставить работать переписывание результатов поиска.

Если перейти прямо к /blog/?s=coffee, он переходит на правильную страницу результатов поиска. Однако из-за других перезаписей URL страница результатов поиска пытается перейти на /?s=coffee/.

Меня подбрасывает динамический контент. Я много чего пробовал, но последние

<rule name="Redirect long query string" stopProcessing="true">
    <match url="^?s=(.*)$" />
    <action type="Rewrite" url="blog/?s=$1" appendQueryString="false" />
</rule>

Я понятия не имею, что делаю. Это чудо, что у меня заработали другие переписчики.

Мне очень жаль, что я сообщаю вам плохие новости, но ваше правило перезаписи ничего не делает для вас. Регулярное выражение в <match> тег недействителен. Прежде всего, строка запроса не является частью URL-адреса и соответствует ? в регулярном выражении вы должны использовать \? как ? имеет особое значение в регулярных выражениях.

А также синтаксис в вашем переписанном url является недействительным. Вы не можете использовать $1 для обратной ссылки, но следует использовать {R:x} (для обратных ссылок на URL) или {C:x} (для обратных ссылок на условия) где x - номер части регулярного выражения, на которую вы хотите сослаться.

К сожалению, мне не совсем понятно, чего вы пытаетесь достичь. Я предполагаю, что вы пытаетесь переписать все запросы, начинающиеся с s=<something> в строке запроса к /blog/?s=<something>. Если это так, то это правило должно делать следующее:

<rule name="Rewrite search queries" stopProcessing="true">
    <match url=".*" />
    <conditions>
        <add input="{QUERY_STRING}" pattern="^s=([^&amp;.]*)&amp;?" />
    </conditions>
    <action type="Rewrite" url="blog/?s={C:1}" appendQueryString="false" />
</rule>

Для простоты s=<something> должен быть первым параметром строки запроса.

Если вы хотите сделать что-то еще, отредактируйте свой вопрос и приведите еще несколько примеров URL-адресов и того, как их придется переписывать.

Обновить: Если вам нужна форма поиска для использования site.com/blog/?s= вместо того site.com/?s= почему бы просто не изменить HTML-код формы поиска? Просто измените action такой формы.

Чтобы указанное выше правило работало вместе с правилами перезаписи WordPress, вам необходимо немного изменить его. Прежде всего вам нужно удалить stopProcessing="true" и на всякий случай измените url из <action> и добавьте ведущую косую черту. Может быть, в этом нет необходимости, просто на всякий случай.

Таким образом, правило перезаписи станет:

<rule name="Rewrite search queries">
    <match url=".*" />
    <conditions>
        <add input="{QUERY_STRING}" pattern="^s=([^&amp;.]*)&amp;?" />
    </conditions>
    <action type="Rewrite" url="/blog/?s={C:1}" appendQueryString="false" />
</rule>

И убедитесь, что это правило выше правил перезаписи WordPress. Правила WordPress должны быть последними.

Я обнаружил гораздо более простой способ сделать то же самое (по крайней мере, на данный момент) с помощью используя настраиваемую форму поиска в моей теме. Я уверен, что эта проблема возникнет в какой-то момент в будущем, но пока это единственный поиск нужного веб-сайта, он будет работать. Я предполагаю, что есть способ разрешить несколько форм поиска так же, как у вас может быть несколько страниц архива категорий (например, searchform-[slug].php) так что поэкспериментирую с этим позже.

Однако мне все еще интересно узнать, как это можно сделать с помощью IIS, >> это решение << решил мою проблему.