.htaccess - presmerovanie URL

htaccess

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ť takto
RewriteRule ^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.php
RewriteCond %{THE_REQUEST} ^.*/index\.php
RewriteRule ^(.*)index.php$ /$1 [R=301,L]
alternatíva presmerovania index.php
RewriteCond %{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.212
Deny from 10.95.47.212
blokovanie IP adries začínajúce 10.95
Deny from 10.95

povolenie konkrétnej IP adresy 10.95.47.212
Allow from 10.95.47.212

kompresia súborov text, HTML, JavaScript, CSS, XML
AddOutputFilterByType 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).