Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Рассмотрим некоторые примеры правил, которые могут часто использоваться.
Переадресация с домена без www на домен с www:
<rule name="Enforce WWW" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{CACHE_URL}" pattern="^(.+)://(?!www)(.*)" /> </conditions> <action type="Redirect" url="{C:1}://www.{C:2}" redirectType="Permanent" /> </rule>
Удаляем из адреса www:
<rule name="Remove WWW" patternSyntax="Wildcard" stopProcessing="true"> <match url="*" /> <conditions> <add input="{CACHE_URL}" pattern="*://www.*" /> </conditions> <action type="Redirect" url="{C:1}://{C:2}" redirectType="Permanent" /> </rule>
Например, мы хотим перенаправлять с home на home/index, так как по сути эти два url ведут на один ресурс и тем самым избежать дублей:
<rule name="avoid articles directory" stopProcessing="true"> <match url="home[/]?$" /> <action type="Redirect" url="home/index" redirectType="Permanent" /> </rule>
Удаление завершающего строку запроса слеша (например, http://localhost:1234/home/index/1/)):
<rule name="Remove trailing slash" stopProcessing="true"> <match url="(.*)/$" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Redirect" redirectType="Permanent" url="{R:1}" /> </rule>
Если у нас изменился адрес, то мы можем использовать переадресацию со старого адреса на новый:
<rule name="Canonical Host Name" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTP_HOST}" negate="true" pattern="^mysite\.com$" /> </conditions> <action type="Redirect" url="http://mysite.com/{R:1}" redirectType="Permanent" /> </rule>
Предотвращение Image Hotlinking - ссылок сторонних сайтов на изображения на нашем сайте:
<rule name="Prevent image hotlinking"> <match url=".*\.(gif|jpg|png)$"/> <conditions> <add input="{HTTP_REFERER}" pattern="^$" negate="true" /> <add input="{HTTP_REFERER}" pattern="^http://mysite\.com/.*$" negate="true" /> </conditions> <action type="Rewrite" url="/images/say_no_to_hotlinking.jpg" /> </rule>
Если сайт доступен по протоколу https, то при обращении к тем же ресурсам сайта, но по протоколу http, сервер будет отправлять ошибку 403. Чтобы избежать этого и просто перенаправить пользователя на тот же запрошенный им ресурс, но только по протоколу https, можно использовать следующее правило:
<rule name="Redirect to HTTPS" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="^OFF$" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /> </rule>
Перевод строки запроса в нижний регистр:
<rule name="Convert to lower case" stopProcessing="true"> <match url=".*[A-Z].*" ignoreCase="false" /> <action type="Redirect" url="{ToLower:{R:0}}" redirectType="Permanent" /> </rule>
Блокирование запроса по IP:
<rule name="Restrict URL" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{REMOTE_ADDR}" pattern="^127.0.0.1$" /> </conditions> <action type="AbortRequest" /> </rule>