Co to jest IIS URL Rewrite Module?

Nie jest to nic innego jak silnik umożliwiający przepisywanie adresów naszych witryn na bardziej przyjazne dla odwiedzających oraz wyszukiwarek internetowych. Podobnie jak w Apache mod_rewrite, dyrektywy w IIS URL Rewrite Module są tworzone przez użycie wyrażeń regularnych.

Czy muszę znać budowę wyrażeń regularnych, aby moja storna miała przyjane linki?

To zależy od Twojej aplikacji. Jeśli posiadasz starszą aplikację, która nie wykorzystuje (lub jej twórcy nie zaimplemtnowali w niej) routingu APS.NET, to IIS URL Rewrite Module jest idealnym rozwiązaniem dla Ciebie. W przypadku popularnych rozwiązań takich jak: MojoPortal, NopCommerce czy BlogEngine.Net i wiele innych obsługa routingu ASP.NET jest domyślnie aktywna.

Jak sterować dyrektywami przepisywania linków w mojej witrynie

Wszystkie dyrektywy muszą znaleźć się w pliku web.config - jest on tworzony dla każdej witryny. W ścieżce: Mój serwer\Moja-Witryna.pl\wwwroot\web.config

Dyrektywy dla IIS URL Rewrite powinny wyglądać jak na schemacie poniżej:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="false" />
        <defaultDocument>
            <files>
                <clear />
                <add value="Default.htm" />
            </files>
        </defaultDocument>
        <rewrite>
            <rules>
                <rule name="Nazwa reguły">
                    <match url="*" />
                    <action type="*" url="*" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

IIS URL Rewrite Module w przykładach

  1. Wyświetl adres witryny z lub bez slasha:
    <!-- Usuń slash z URL -->
    <rule name="Usuń 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>
    <!-- Dodaj slash do URL -->
    <rule name="Dodaj 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>
  2. Wymuś wyświetlanie małych liter w URL:
    <rule name="Małe litery w URL" stopProcessing="true">
     <match url="[A-Z]" ignoreCase="false" />
     <action type="Redirect" url="{ToLower:{R:0}}" redirectType="Permanent" />
    </rule>
  3. Określenie kanonicznego adresu witryny
    <rule name="Kanoniczny URL" stopProcessing="true">
     <match url="(.*)" />
     <conditions>
         <add input="HTTP_HOST" negate="true" pattern="^hostit\.pl$" />
     </conditions>
     <action type="Redirect" url="http://hostit.pl/{R:1}" redirectType="Permanent" />
    </rule>
  4. Przekierowanie na HTTPS (dla certyfikatów SSL)
    <rule name="Wymuś połącznei z HTTPS" stopProcessing="true">
     <match url="(.*)" />
     <conditions>
         <add input="HTTPS" pattern="^OFF$" />
     </conditions>
     <action type="Redirect" url="https://HTTP_HOST/{R:1}" redirectType="SeeOther" />
    </rule>
  5. Przekierowanie na nowy adres, z zachowaniem struktury witryny
    <rule name="Przekierowanie ruchu na nowa-domena.pl" stopProcessing="true">
     <match url=".*" />
     <conditions logicalGrouping="MatchAny">
         <add input="HTTP_HOST" pattern="^stara-domena.pl$" />
     </conditions>
     <action type="Redirect" url="http://nowa-domema.pl/{R:0}" redirectType="Permanent" />
    </rule>