Portál technické podpory

Pokud zde nenajdete to, co jste hledali, neváhejte nás kontaktovat.
Potřebné informace pro vás rádi doplníme.

UrlRewrite - přesměrování a přepisování adres URL

Webový server IIS na Windows serverech umožňuje používat modul URLRewrite k dynamickému přepisování a přesměrovávání adres webových požadavků, které na něj chodí z internetu, pomocí tzv. přepisovacích pravidel. Tato pravidla se nastavují u daného webu přímo na serveru IIS, který si je potom ukládá v daném webu do souboru web.config do sekce configuration/system.webServer/rewrite/rules.

Tento soubor lze také upravovat přímo. Jelikož v případě webhostingu zákazník obvykle nemá přístup do konfigurace serveru IIS, aby si tam mohl pravidla nastavit, zbývá mu obvykle pouze si soubor web.config stáhnout přes FTP, náležitě upravit a poté opět přes FTP nahrát zpět upravený. Zde je příklad kompletního obsahu takového souboru web.config:

<?xmlversion="1.0" encoding="utf-8" ?>
 <configuration>
  <system.webServer>
   <rewrite>
   <rules>

     <rule name="Moje pravidlo">
      <matchurl="starastranka.html" />
      <action type="Redirect" redirectType="Permanent" url="novastranka.html" />
     </rule>

    </rules>
   </rewrite>
  </system.webServer>
 </configuration>

 

Uvnitř sekce „rules“ může být libovolný počet přepisovacích pravidel, všechna by měla vždy začínat elementem <rule> a končit ukončovacím</rule>. Pravidla se kontrolují jedno po druhém shora dolů.

Existují dva základní typy:

  • Přesměrování znamená, že uživatel/návštěvník webu vidí, že byl přesměrován jinam, V adresním řádku se mu změní adresa na novou.
  • Přepsání znamená, že se adresa přepíše pouze interně na serveru a uživatel to nepozná. V adresním řádku vidí stále původní adresu, kterou tam zadal.

Dokumentaci k celému modulu UrlRewrite naleznete v dokumentaci společnosti Microsoft.

Následuje několik příkladů nejčastějších případů použití.

Jednoduché přesměrování z jedné stránky na jinou

Přesměruje požadavek ze stránky „stara.aspx“ na stránku „nova.aspx“. Jedná se o přesměrování, takže se uživateli v prohlížeči změní adresa na novou. Přesměrování je nastaveno jako dočasné, což lze změnit přepsáním hodnoty u atributu redirectType.

<!--Jednoduchepresmerovani ze starestranky na novou -->
<rule name="Presmerovani 'stara.aspx' -> 'nova.aspx'">
   <matchurl="^stara.aspx" />
   <action type="Redirect" url="/rewrite/nova.aspx" redirectType="Temporary" />
    <!-- Permanent - trvale presmerovani -->
    <!-- Temporary - docasne presmerovani -->
</rule>

Přesměrování na doménu bez předpony "www."

Přesměruje jakýkoli požadavek typu www.domena.cz/cokolidalsiho na domena.cz/cokolidalsiho. V prohlížeči bude vidět nová adresa. Přesměrování je nastaveno jako trvalé.

<!--Presmerovani na domenu bez "www." -->
<rule name="Presmerovani 'www.domena.cz' -> 'domena.cz'" stopProcessing="true">
  <matchurl="(.*)" />
   <conditions>
      <add input="{HTTP_HOST}" pattern="^www\.(.*)" />
   </conditions>
   <action type="Redirect" url="http://{C:1}/{R:1}" redirectType="Permanent" />
</rule>

Přesměrování z HTTP na HTTPS

Použijte, pokud máte na webu nainstalovaný důvěryhodný SSL certifikát a chcete, aby návštěvníci Vašich webových stránek používali výhradně šifrovanou komunikaci.

<!-- Presmerovani HTTP na HTTPS -->
<rule name="Presmerovani HTTP -> HTTPS" stopProcessing="true">
<matchurl="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>

Přesměrování aliasu do podsložky

Přesměruje požadavek z vedlejší domény na hlavní doménu do stejnojmenné podsložky. Například www.alias.cz ->hlavnidomena.cz/alias.cz. Nezapomeňte v kódu přepsat texty „alias.cz“ a „hlavnidomena.cz“ požadovaným skutečným aliasem a hlavní doménou!

<!-- Presmerovani aliasu do podslozky -->
<rule name="Presmerovani 'alias.cz' a 'www.alias.cz' -> 'hlavnidomena.cz/alias/'">
   <matchurl="(.*)" />
   <conditions>
      <add input="{HTTP_HOST}" pattern="domena.cz" />
   </conditions>
   <action type="Redirect" url="http://hlavnidomena.cz/alias.cz/{R:1}" redirectType="Temporary" />
</rule>

Přepisy adres na přehlednější

Pokud používáte nějaký redakční systém, adresy jsou tam často ve formátu: clanek?id=12345&title=TITULEK_CLANKU. To je pro uživatele ovšem nepřehledné, takže se často používá vnitřní (pro uživatele neviditelné) přepisování ze srozumitelnějšího formátu typu clanek/12345/TITULEK_CLANKU. V případě potřeby nezapomeňte upravit v textu tvar původní adresy a název cílové stránky.

<!-- Prepis pro redakcnisystem - srozumitelne adresy -->
<rule name="Prepis 'clanek/12/nadpis' na 'clanek.aspx?id=12&amp;title=nadpis'">
<matchurl="^clanek/([0-9]+)/([_0-9a-z-]+)" />
<action type="Rewrite" url="/clanek.aspx?id={R:1}&amp;title={R:2}" />
</rule>

Ochrana proti útokům na SQL databázi

Útoky na SQL databáze přes webové stránky, které do databáze přistupují, jsou stále časté. Tímto nastavením to útočníkům poněkud ztížíte.

<!-- Ochrana proti utokum na SQL databazi -->
<rule name="Blokovani SQL utoku" stopProcessing="true">
<matchurl=".*" />
<conditions>
<add input="{QUERY_STRING}" pattern="^.*(;|&lt;|>|'|&quot;|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark).*" />
</conditions>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="You do not have permission to view this directory or page." />
</rule>

Blokování externího linkování obrázků

Máte na Vašich stránkách plno obrázků a nechcete, aby na ně mohl kdokoli z internetu odkazovat z vlastních stránek? S tímto nastavením budou Vaše obrázky viditelné pouze na Vašich stránkách. Když se někdo pokusí odkázat na nějaký Váš obrázek z jiných stránek z internetu, podstrčí se mu místo něj obrázek „linkovani_obrazku_blokovano.png“. Pravidlo testuje, jestli proměnná HTTP_REFERER (stránka, ze které vzešel tento požadavek) je buď prázdná, nebo je mezi Vámi povolenými doménami. Pokud ne, místo skutečného obrázku se podstrčí jiný s informací o zablokování.

<!-- Blokovani externiho linkovani obrazku -->
<rule name="Blokovani externiho linkovani obrazku" stopProcessing="true">
<matchurl=".*\.(gif|jpg|jpeg|png)$" />
<conditions>
<add input="{HTTP_REFERER}" pattern="^$" negate="true" />
<add input="{HTTP_REFERER}" pattern="domena.cz$" negate="true" />
<!— obdobnym zpusobem je zde potreba uvest vsechny domenove nazvy, ktere na vase obrazky odkazovat SMEJI a tudiz by se nemely blokovat -->
</conditions>
<action type="Rewrite" url="/rewrite/linkovani_obrazku_blokovano.png" />
</rule>