Portál technickej podpory

Ak tu nenájdete to, čo ste hľadali, neváhajte nás kontaktovať.
Potrebné informácie pre vás radi doplníme.

UrlRewrite - presmerovanie a prepisovanie adries URL

Webový server IIS na Windows serveroch umožnuje používať URLRewrite k dynamickému prepisovaniu a presmerovaniu adries webových požiadaviek, ktoré na neho chodia z internetu, pomocou tzv. prepisovacích pravidiel. Tieto pravidlá sa natavujú u daného webu priamo na servery IIS, ktorý si ich potom ukladá v danom webe do súboru web.config do sekcie configuration/system.webServer/rewrite/rules.

Tento súbor je možné tiež upravovať priamo. Keďže v prípade webhostingu zákazník obvykle nemá prístup do konfigurácie serveru IIS, aby si tam mohol pravidlá nastaviť, obvykle mu ostáva si iba súbor web.config stiahnuť cez FTP, náležito upraviť a potom opäť cez FTP nahrať späť upravený. Tu je príklad kompletného obsahu takého súboru 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>

 

Vnútri sekcie „rules“ môže byť ľubovolný počet prepisovacích pravidiel, všetky by mali vždy začínať elementom <rule> a končiť ukončovacím </rule>. Pravidlá sa kontrolujú jedno po druhom zhora dolu.

Existujú dva základné typy:

  • Presmerovanie znamená, že užívateľ/návštevník webu vidí, že bol presmerovaný inam. V adresnom riadku sa mu zmení adresa na novú.
  • Prepísanie znamená, že sa adresa prepíše iba interne na servery a užívateľ to nespozná. V adresnom riadku vidí stále pôvodnú addresu, ktorú tam zadal.

Dokumentáciu k celému modulu UrlRewrite nájdete v dokumentácii spoločnosti Microsoft.

Nasleduje niekoľko príkladov najčastejších prípadov použitia.

Jednoduché presmerovanie z jednej stránky na inú

Presmeruje požiadavku zo stránky „stara.aspx“ na stránku „nova.aspx“. Jedná sa o presmerovanie, takže sa užívateľovi v prehliadači o presmerovaní zmení adresa na novú. Presmerovanie je nastavené ako dočasné, čo je možné zmeniť prepísaním hodnoty atribútu redirectType.

<!--Jednoduchepresmerovanie 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>

Presmerovanie na doménu bez predpony "www."

Presmeruje akúkoľvek požiadavku typu www.domena.cz/cokolidalsiho na domena.cz/cokolidalsiho. V prehliadači bude vidno novú adresu. Presmerovanie je nastavené ako trvalé.

<!--Presmerovanie na doménu 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>

Presmerovanie z HTTP na HTTPS

Použite, pokiaľ máte na webe nainštalovaný dôveryhodný SSL certifikát a chcete, aby návštevníci Vašich webových stránok používali výhradne šifrovanú komunikáciu.

<!-- 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>

Presmerovanie aliasu do podzložky

Presmeruje požiadavku z vedlajšej domény na hlavnú doménu rovnomennej podzložky. Napríklad www.alias.cz ->hlavnidomena.cz/alias.cz. Nezabudnite v kóde prepísať texty „alias.cz“ a „hlavnidomena.cz“ požadovaným skutočným aliasom a hlavnou doménou!

<!-- Presmerovani aliasu do podslozky -->br /><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>

Prepisy adries na prehladnejšie

Pokiaľ používate nejaký redakčný systém, adresy sú tam často vo formáte: clanek?id=12345&title=TITULEK_CLANKU. To je pre užívateľa neprehľadné, takže sa často používa vnútorné (pre užívateľov neviditeľné) prepisovanie zo zrozumiteľnejšieho 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 útokom na SQL databázu

Útoky na SQL databázy cez webové stránky, ktoré do databázy pristupujú, sú stále časté. Týmto nastavením to útočníkom sťaží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>

Blokovanie externého linkovania obrázkov

Máte na Vašich stránkach plno obrázkov a nechcete, aby na ne mohol ktokoľvek z internetu odkazovať z vlastných stránok? S týmto nastavením budú Vaše obrázky viditeľné len na Vašich stránkach. Keď sa niekto pokúsi odkázať na nejaký Váš obrázok z iných stránok z internetu, podstrčí sa mu miesto neho obrázok „linkovani_obrazku_blokovano.png“. Pravidlo testuje, či je premenná HTTP_REFERER (stránka, z ktorej vzišla táto požiadavka) je buď prázdná, alebo je medzi Vami povolenými doménami. Pokiaľ nie, miesto skutočného obrázku sa podstrčí iný s informáciou o zablokovaní.

<!-- 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>