Modul mod_rewrite na linuxových serveroch
K serveru Apache existuje veľké množstvo doplnkov s rôznymi funkciami. Jedným z najpoužívanejších je modul mod_rewrite. Tento doplnok je využívaný, v niektorých prípadoch aj priamo vyžadovaný, radou webových aplikácií. Aj keď sú jeho možnosti veľmi široké a je možné ho použiť k viacerým účelom, najčastejšie je používaný pre tvorbu „pekných“ URL, čo má celkom zásadný význam pre tzv. SEO webu. V neposlednom rade môžete pomocou mod_rewrite napríklad blokovať SQL útoky či prístupy z cudzích štátov s výnimkou ČR a SK.
Podmienky funkčnosti
- na servery musí bežať Apache
- mod_rewrite musí byť nainštalovaný a povolený
- musíte mať možnosť konfigurovať server -- buďto súborom httpd.conf, alebo svojim súborom .htaccess
Pokiaľ by ani takto pravidlo nefungovalo, kontaktujte našu zákaznícku podporu formou autorizovanej požiadavky.
Príklady nastavenia
Nižšie sme pre vás pripravili niekoľko najčastejšie používaných príkladov pre presmerovanie pomocou mod_rewrite. Do konfiguračného súboru .htaccess stačí vložiť príslušný kód:
Jednoduché presmerovanie
Ak budete chcieť, aby sa stránka http://moja-domena.sk/pozadovany-subor.html presmerovala na http://moja-domena.sk/vysledny-subor.html.
RewriteEngine on
RewriteRule pozadovany-subor\.html /vysledny-subor.html [R]
Jednoduché podstrčenie obsahu
Miesto zadanej stránky sa potom objaví obsah podstrčenej stránky. Zadaná adresa v prehliadači viacmenej ostáva rovnaká.
RewriteEngine on
RewriteRule zadana-stranka\.html podstrcena-stranka.html
Presmerovanie obsahu adresára na hlavnú stránku webu
Pravidlo, ktoré presmeruje všetko z aktuálneho adresára (v ktorom je .htaccess) na hlavnú stránku www.moja-domena.sk.
RewriteEngine on
RewriteRule (.*) http://www.moje-domena.cz [R=301]
Presmerovanie aliasovej domény do určitého adresára v roote webu hlavnej domény
RewriteEngine on
RewriteCond %{HTTP_HOST} ^aliasova-domena.sk$
RewriteRule ^(.*)$ http://www.aliasova-domena.sk [R,L]
RewriteCond %{HTTP_HOST} ^www.aliasova-domena.sk$
RewriteCond %{REQUEST_URI} !^/nazov-adresara/
RewriteRule ^(.*)$ /nazev-adresare/$1 [L]
Peesmerovanie na doménu s www
Presmerovanie všetkých požiadaviek na doménu s www so zachovaním parametrov v URL
RewriteEngine on
RewriteCond %{HTTP_HOST} ^moja-domena.sk [NC]
RewriteRule (.*) http://www.moja-domena.sk/$1 [R=301,QSA,L]
Presmerovanie na doménu bez www
Presmerovanie všetkých požiadaviek na doménu bez www so zachovaním parametrov v URL
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.moja-domena.sk
RewriteRule (.*) http://moja-domena.sk/$1 [R=301,QSA,L]
Presmerovanie z http na https protokol
Nastaví automatické presmerovanie webu na zabezpečený protokol https.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Presmerovanie všetkého 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 nastavenie blokuje požiadavky smerujúce na súbor wp-login.php a xmlrpc.php (najčastejšie zdroje útokov). Môžete takto nape. zamedziť prístup do konkrétneho adresára s citlivými dátami.
<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 štátov sú definované podľa štandardu ISO 3166-1 (alpha-2).
Takto bude vyzerať zápis výnimky len pre Slovenskú Republiku:
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(SK)$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE_V6} !^(SK)$
Kombinácia výnimiek pre CZ, SK, DE:
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(CZ|SK|DE)$
RewriteCond %{ENV:GEOIP_COUNTRY_CODE_V6} !^(CZ|SK|DE)$
Oficiálna dokumentácia modulu GeoIP je k dispozícii na webových stránkach MaxMind: http://dev.maxmind.com/geoip/legacy/mod_geoip2/
Prevencia SQL útokov
SQL Injection je technika namierená proti (nie len) webovým aplikáciám využívajúcim SQL databázu. Myšlienkou je databázu podstrčiť dáta, napríklad v URL alebo prostredníctvom formulára, ktoré následne databáza vykoná. Blokovanie podobných pokusov zaistí tento kód:
RewriteCond %{QUERY_STRING} ^.*(;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark).* [NC]
RewriteRule .* - [F]
Linkovanie obrázkov
Mod_rewrite sa dá jednoducho využiť tiež pre zamedzenie prehliadania obrázkov z cudzích serverov. V princípe ide len o to, že skontrolujeme, či požiadavka priľla z nejakého cudzieho servera a v prípade, že požaduje obrázok, podstrčíme mu nejaký iný (napr. prázdny). Takto ľahko zabránite používániu svojich obrázkov na cudzích stránkach a nikto vám nebude zvyšovať 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 zaujímavý článok s ďalšími príkladmi prikladáme nižšie:
https://www.interval.cz/clanky/mod_rewrite-pro-hezka-url-rewriteengine-a-rewriterule/
Príznaky v hranatých zátvorkách
V príkladoch použitia mod_rewrite sa na konci pravidiel často používajú príznaky v hranatých zátvorkách (tzv. flags).
[L] - Značí posledné pravidlo, nič ďalej sa neprepisuje.
[QSA] - Do prepísanej / presmerovanej adresy pridá za otaznik všetko, čo je za otáznikom v pôvodnej požiadavke (query string). QSA v skratke znamená "query string append". V prípade ak naopak chcete query string useknúť, ukončite druhý parameter otáznikom.
[R] - Bude sa presmerovávať (s kódem 302), nie podstrkávať
[R=301] - Presmerovanie pôjde s http kódom 301.
[F] - Nastavuje kód 403 - zakázané. V kombinácií s dobrou RewriteCond umožňuje podmienene zakázať niektoré URL.
[T=mime-typ] - Umožňuje výsledok poslať s iným mime-typeom. Použiteľné hlavne pri presmerovaní na binárne súbory.
[NC] - Nezáleží na veľkosti písmen (vhodné hlavne do riadku RewriteCond).
Viac príznakov v hranatých zátvorkách sa oddeľuje čiarkou.