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.