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.

Modul mod_rewrite na linuxových serverech

K serveru Apache existuje velké množství doplňků s různými funkcemi. Jedním z nejpoužívanějších je modul mod_rewrite. Tento doplněk je využíván, v některých případech i přímo vyžadován, řadou webových aplikací. I když jsou jeho možnosti velmi široké, a je možné jej použít k mnoha účelům, nejčastěji je užíván pro tvorbu „pěkných“ URL, což má zcela zásadní význam pro tzv. SEO webu. V neposlední řadě  můžete pomocí mod_rewrite například blokovat SQL útoky či přístupy z cizích států s výjimkou ČR a SK.

Podmínky funkčnosti

  • na serveru musí běžet Apache
  • mod_rewrite musí být nainstalován a povolen 
  • musíte mít možnost konfigurovat server -- buďto souborem httpd.conf, nebo svým souborem .htaccess

Pokud by ani tehdy pravidlo nefungovalo, kontaktujte naši zákaznickou podporu formou autorizovaného požadavku.

Příklady nastavení

Níže jsme pro vás připravili několik nejčastěji používaných příkladů pro přesměrování pomocí mod_rewrite. Do konfiguračního souboru .htaccess stačí vložit příslušný kod:

Jednoduché přesměrování

Budete-li chtít, aby se stránka http://moje-domena.cz/pozadovany-soubor.html přesměrovala na http://moje-domena.cz/vysledny-soubor.html.

RewriteEngine on
RewriteRule   pozadovany-soubor\.html   /vysledny-soubor.html   [R]

 

Jednoduché podstrčení obsahu

Místo zadané stránky se pak objeví obsah podstrčené stránky. Zadaná adresa v prohlížeči nicméně zůstává stejná.

RewriteEngine on
RewriteRule zadana-stranka\.html podstrcena-stranka.html

 

Přesměrování obsahu adresáře na hlavní stránku webu

Pravidlo, které přesměruje všechno z aktuálního adresáře (ve kterém je .htaccess) na hlavní stránku www.moje-domena.cz.

RewriteEngine on
RewriteRule    (.*)   http://www.moje-domena.cz     [R=301]
 

Přesměrování aliasové domény do určitého adresáře v rootu webu hlavní domény

RewriteEngine on
RewriteCond %{HTTP_HOST} ^aliasova-domena.cz$
RewriteRule ^(.*)$ http://www.aliasova-domena.cz [R,L]
RewriteCond %{HTTP_HOST} ^www.aliasova-domena.cz$
RewriteCond %{REQUEST_URI} !^/nazev-adresare/
RewriteRule ^(.*)$ /nazev-adresare/$1 [L]

 

Přesměrování na doménu s www

Přesměrování všech požadavků na doménu s www se zachováním parametrů v URL

RewriteEngine on
RewriteCond %{HTTP_HOST} ^moje-domena.cz [NC]
RewriteRule (.*) http://www.moje-domena.cz/$1 [R=301,QSA,L]
 

 

Přesměrování na doménu bez www

Přesměrování všech požadavků na doménu bez www se zachováním parametrů v URL

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.moje-domena.cz
RewriteRule (.*) http://moje-domena.cz/$1 [R=301,QSA,L]

 

Přesměrování z http na https protokol

Nastaví automatické přesměrování webu na zabezpečený protokol https.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
 

 

Přesměrování všeho na doménu s www + https

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]


GeoIP modul pro blokování přístupů

Toto nastavení blokuje požadavky směřující na soubor wp-login.php a xmlrpc.php (nejčastější zdroje útoků). Můžete takto např. zamezit přístup do konkrétního adresáře s citlivými daty.

<IfModule mod_geoip.c>
<FilesMatch "wp-login.php|xmlrpc.php">
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(CZ|SK)$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE_V6} !^(CZ|SK)$
RewriteRule ^(.*)$ - [F,L]
</FilesMatch>
</IfModule>

Kódy států jsou definovány dle standardu ISO 3166-1 (alpha-2).

Takto bude vypadat zápis výjimky pouze pro Českou Republiku:

RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(CZ)$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE_V6} !^(CZ)$

Kombinace výjimek pro CZ, SK, DE:

RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(CZ|SK|DE)$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE_V6} !^(CZ|SK|DE)$

Oficiální dokumentace modulu GeoIP je k dispozici na webových stránkách MaxMind: http://dev.maxmind.com/geoip/legacy/mod_geoip2/

 

Prevence SQL útoků

SQL Injection je technika namířena proti (nejen) webovým aplikacím využívajícím SQL databázi. Myšlenkou je databázi podstrčit data, například v URL nebo prostřednictvím formuláře, které následně databáze vykoná. Blokaci podobných pokusů zajistí tento kod:

RewriteCond %{QUERY_STRING} ^.*(;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark).* [NC]
RewriteRule .* - [F]

 

Linkování obrázků

Mod_rewrite se dá jednoduše využít také pro zamezení prohlížení obrázků z cizích serverů. V principu jde pouze o to, že zkontrolujeme, zda požadavek přišel z nějakého cizího serveru, a v případě, že požaduje obrázek, podstrčíme mu nějaký jiný (např. prázdný). Takto snadno zabráníte používání svých obrázků na cizích stránkách a nikdo vám nebude zvyšovat traffic.

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://example.com.*$
RewriteCond %{HTTP_REFERER} !^http://www.example.com.*$
RewriteRule .*.(gif|jpg|jpeg|png|GIF|JPG|JPEG|PNG)$ http://www.example.com/bad.gif [L,R]

 

Odkaz na zajímavý článek s dalšími příklady přikládáme níže:

https://www.interval.cz/clanky/mod_rewrite-pro-hezka-url-rewriteengine-a-rewriterule/

Příznaky v hranatých závorkách

V příkladech použití mod_rewrite se na konci pravidel často používají příznaky v hranatých závorkách (tzv. flags).

[L] - Značí poslední pravidlo, nic dále se nepřepisuje.

[QSA] - Do přepsané / přesměrované adresy přidá za otazník vše, co je za otazníkem v původním požadavku  (query string). Zkratka QSA znamená "query string append". Jestliže naopak chcete query string useknout, ukončete druhý parametr otazníkem.

[R] - Bude se přesměrovávat (s kódem 302), nikoli podstrkávat

[R=301] - Přesměrování půjde s http kódem 301.

[F] - Nastavuje kód 403 - zakázáno. V kombinaci s dobrou RewriteCond umožňuje podmíněně zakázat některá URL.

[T=mime-typ] - Umožňuje výsledek poslat s jiným mime-typem. Použitelné zejména při přesměrování na binární soubory.

[NC] - Nezáleží na velikosti písmen (vhodné zejména do řádku RewriteCond).

Více příznaků v hranatých závorkách se v odděluje čárkou.