Перезапись URL-адреса в IIS - изменение ключа и значения строки запроса на маршрут - PullRequest
0 голосов
/ 10 мая 2018

Недавно я реализовал перезапись URL IIS на одном из моих веб-сайтов.Я использую URL Redirection, а не переписываю для всего.Все мои статические перенаправления работают отлично, однако есть один конкретный тип динамического перенаправления, который я не могу заставить работать.

У меня были старые URL, которые выглядели так:

http://example.com/?tag=mytag

Я бы хотел, чтобы это было перенаправлено на новый формат URL:

http://example.com/tag/mytag

Для этих URL-адресов ключ (тег) строки запроса известен и исправлен, однако значение строки запроса ("mytag" вприведенный выше пример) полностью динамичен и заранее неизвестен (поэтому я не верю, что поэтому можно использовать IIS Rewrite Maps).

Можно добавить правило IIS Rewrite, которое выполняет такой тип перенаправления длявсе возможные значения строки запроса, которые могут быть предоставлены?

1 Ответ

0 голосов
/ 10 мая 2018

Да, смелость решения ниже.То, что происходит, это ...

1-е условие означает, что это правило применяется только к верхнему уровню сайта.Так что http://example.com/?tag=mytag будет перенаправлять, тогда как http://example.com/foobar/?tag=mytag не будет.

2-е условие - это магия.Он запускается только в том случае, если существует параметр запроса с именем tag, а (.*) является регулярным выражением для получения значения для использования в новом URL.

Действие использует значение, которое вы взяли во 2-м условии, указанном как {C:1}.appendQueryString делает именно то, что говорит - устанавливается соответствующим образом.redirectType следует оставить как Temporary (код ответа HTTP 307) до тех пор, пока вы не будете довольны, затем измените его на Permanent (код ответа HTTP 301).После того, как вы отправите ответ 301, клиент (/ поисковая система) будет потенциально кэшировать ответ и не будет повторно запрашивать с сервера, вызывая проблемы, если вы допустите ошибку.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>     
                <rule name="Redirect based on tag query value">                 
                    <conditions>
                        <add input="{REQUEST_URI}" pattern="$" />
                        <add input="{QUERY_STRING}" pattern="tag=(.*)" />
                    </conditions>
                    <action type="Redirect" url="tag/{C:1}/" appendQueryString="false" redirectType="Temporary" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
...