
.htaccess - presmerovanie URL
Bezplatný online kurz .htaccess - presmerovanie URL (k tejto téme) nájdete v akadémii učím sa online.
Čo je .htaccess?
Konfiguračný súbor .htaccess slúži bežným užívateľom na úpravu niektorých vlastností Apache servera bez nutnosti osloviť (a platiť) skúseného programátora, webmastra alebo administrátora servera. Medzi vlastnosti, ktoré je možné jednoducho meniť
, určite patrí:
- presmerovanie stránok (URL adries) - dôležité z hľadiska SEO (optimalizácie webstránok)
- zakázanie prístupu z určitých IP adries alebo naopak povolenie určitých IP adries - bezpečnosť
- nastavenie chybových stránok (404) - tiež patrí k optimalizácii webstránok
- ochrana adresára heslom
- komprimácia (zmenšenie) súborov pre rýchlejšie načítanie webstránok
- nastavenie inej východzej stránky ako "index.php" a tak podobne
Súbor .htaccess je umiestnený v určitom priečinku a umožňuje upravovať správanie adresára, ktorý sa následne správa inak ako nastavil webmaster alebo administrátor servera. Na serveri môžete mať viac ".htaccess" súborov - v každom podadresári vždy maximálne jeden (alebo žiadny). Príkazy sa dedia z nadriadeného priečinka, čo niekedy môže byť problém. Vtedy stačí vytvoriť samostaný ".htaccess" pre podadresár, nastaviť iné správanie a problém je vyriešený. Jednoduché.
Presmerovanie URL v .htaccess
Ako vytvoriť .htaccess?
V ľubovolnom adresári vo svojom PC s Windows 10 kliknite pravým tlačítkom, vyberte možnosť "Nový" > "Textový dokument" a zmeňte jeho názov (Windows 10 vytvorí "Nový textový dokument.txt") na .htaccess - pozor, Windows 10 ho automaticky premenuje na ".htaccess.txt", takže ho treba ešte raz premenovať (vymazať ".txt"), musí sa volať iba ".htaccess" (malými písmenami) - nijak inak, to je dôležité. V niektorých operačných systémoch (napr. Linux, Unix a podobne) sa súbory začínajúce bodkou považujú za skryté. Preto, aj keď ho skopírujete cez FTP na server, nemusíte ho vidieť, ale môže byť skrytý. Nezľaknite sa, je to len nastavením FTP klienta (napr. WinSCP, Total Commander atď.) - voľba zobraziť skryté súbory.
Štruktúra príkazov v .htaccess
Nebojte sa, nebudem tu písať rozsiahle poučky ktorým nikto nerozumie, iba najdôležitejšie veci:
Príklad príkazu: RewriteCond %{QUERY_STRING} ^(.*)$
Vysvetlivky:
prvá časť %{QUERY_STRING} je celý výraz (parameter, reťazec dopytu) za otáznikom a zapíše ho do premennej %
%1 teda bude prvá hodnota (premenná)
druhú časť ^(.*)$ chceme priradiť
^ (strieška) znamená začína (výraz, reťazec dopytu, parameter); (.*) znamená ľubovolný znak; $ znamená reťazec končí predchádzajúcim (v našom prípade ľubovolným) znakom
prípadne ľubovolné číslo môžeme zapísať takto: ([0-9]*)
ak potrebujeme niečo okomentovať, použijeme # na začiatku riadku
Ďalej budeme používať parametre:
[L] znamená, že ďalší preklad adresy nebude potrebný – pokiaľ sa adresa raz presmeruje, nebude sa už skúšať v ďalších podmienkach, pokiaľ by ste na seba vzájomne presmerovali dve stránky, presmerovanie by sa nikdy neskončilo
[R] znamená dočasné presmerovanie (302)
[R=301] znamená trvalé presmerovanie
[QSA] znamená, že do výslednej adresy sa má pridať aj reťazec s otáznikom
[NC] znamená, že nie je potrebné rozlišovať veľkosť písmen
Zapnutie príkazu: RewriteEngine On
Upozornenie: tento príkaz zadajte v každom ".htaccess" iba raz!
#SoftverNaMieru
tak už poďme presmerovávať - praktické príklady z našej webstránky:
jednoduché presmerovanie starej adresy
príklad: (www\.softver-na-mieru\.sk/stara-stranka)
na novú URL (www\.softver-na-mieru\.sk/nova-stranka)RevriteEngine On
RewriteRule ^stara-stranka$ /nova-stranka [R=301,L]
všimnite si znak $ ktorý znamená, že sa presmeruje iba webstránka končiaca reťazcom "stara-stranka"
ak by sme chceli presmerovať webstránky kde reťazec "stara-stranka" nie je na konci, príkaz bude vyzerať taktoRewriteRule ^stara-stranka /nova-stranka [R=301,L]
ďalej nezobrazovanie URL adresy s otáznikom - Query String
potrebujeme presmerovať starú stránku s parametrom - to čo je za otáznikom
príklad: (www\.softver-na-mieru\.sk/stranka?start=7)
na novú URL adresu bez parametra (www\.softver-na-mieru\.sk/stranka)RewriteCond %{QUERY_STRING} ^start=(.*)$ [NC]
RewriteRule ^ www\.softver-na-mieru\.sk%{REQUEST_URI}? [R=301,L]
ešte jeden príklad na Query String
potrebujeme presmerovať starú stránku s parametrom - všetko čo je za otáznikom
príklad: (www\.softver-na-mieru\.sk/component/users/login?view=login&Itemid=437)
na novú URL adresu bez parametra (www\.softver-na-mieru\.sk/prihlasenie)RewriteCond %{QUERY_STRING} ^view=login&Itemid=([0-9]*)$
RewriteRule ^component/users/login /prihlasenie? [R=301,L]
ak potrebujeme iba jedno konkrétne číslo v Itemid, môžeme ho tam napísať, ale ak potrebujeme ošetriť všetky kombinácie, použijeme ([0-9]*) pre číslo alebo (.*) pre znamená ľubovolný znak
otáznik na konci nového presmerovania zabráni zobrazeniu parametra po presmerovaní
pokračujeme s presmerovaním - nezobrazovaním index.phpRewriteCond %{THE_REQUEST} ^.*/index\.php
RewriteRule ^(.*)index.php$ /$1 [R=301,L]
alternatíva presmerovania index.phpRewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ www\.softver-na-mieru\.sk/ [R=301,L]
presmerovanie webstránky z www na adresu bez www:RewriteCond %{HTTP_HOST} ^www\.softver-na-mieru\.sk [NC]
RewriteRule ^(.*)$ www\.softver-na-mieru\.sk/$1 [L,R=301]
presmerovanie webstránky bez www na adresu s www:RewriteCond %{HTTP_HOST} ^softver-na-mieru\.sk [NC]
RewriteRule ^(.*)$ www\.softver-na-mieru\.sk/$1 [L,R=301]
presmerovanie URL bez koncovej lomky "/" - čo spôsobuje duplicitný obsah ktorý Google penalizuje,
príklad: (www\.softver-na-mieru\.sk/stranka/)RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
blokovanie konkrétnej IP adresy 10.95.47.212Deny from 10.95.47.212
blokovanie IP adries začínajúce 10.95Deny from 10.95
povolenie konkrétnej IP adresy 10.95.47.212Allow from 10.95.47.212
kompresia súborov text, HTML, JavaScript, CSS, XMLAddOutputFilterByType DEFLATE text / htm
AddOutputFilterByType DEFLATE text / html
AddOutputFilterByType DEFLATE text / xml
AddOutputFilterByType DEFLATE text / css
AddOutputFilterByType DEFLATE text / plain
AddOutputFilterByType DEFLATE application / xml
AddOutputFilterByType DEFLATE application / xhtml + xml
AddOutputFilterByType DEFLATE application / rss + xml
AddOutputFilterByType DEFLATE application / javascript
AddOutputFilterByType DEFLATE application / x-javascript
A na záver taká drobnosť - ak niečo zmeníte v .htaccess a hneď to nefunguje, skúste najskôr vyčistiť Vyrovnávaciu pamäť (cash) svojho prehliadača (klávesová skratka: ctrl+shift+del).