Nápověda CZECHIA.COM

Zákaznická a technická podpora 24/7

mod_rewrite

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.

Přesměrování pomocí souboru .htaccess

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]

Omezení přistupů pomocí souboru .htaccess

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.