Да, смелость решения ниже.То, что происходит, это ...
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>