utorok 3. februára 2015

APACHE HTACCESS - NASTAVENIA

Takže asi najťažšie na celom webe je správne nastaviť priority, teda tento dokument sa začína na samom vrchu takto:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^domena\.sk
RewriteRule ^(.*)$ http://www.domena.sk/$ [R=301,L]

Presmerovanie z http verzie na verziu http://www.domena.sk/ a dôvod je prostý. WWW je viac ako http aj keď teraz mnohí z vás namietajú je to predsa len tak. Http má nižšiu prioritu aj keď to v prehľadávačoch mnoho krát nie je znateľné na pozíciách. Nasledujúci riadok je vždy prázdny a začína sa novým riadkom a príkazom. Na záver pridám kompletný htaccess ako vzor.

RewriteCond %{THE_REQUEST} ^.*/index\.html
RewriteRule ^(.*)index.html$ http://www.domena.sk/$1 [R=301,L]

Presmerovanie /index.html na http://www.domena.sk/ je v princípe lepšie ako presmerovanie na /domov.html alebo iný výraz. Index zostane takto vždy domovskou stránkou webu a teda hlavnou sttránkou.

# error docs
ErrorDocument 404 /404.html

Vytvorte v roote webu index 404.html a dajte tak najavo všetkým "nespratníkom" že vaše stránky sú akotak chránené pred zapísaním nezmyselnej adresy.

SetEnvIfNoCase User-Agent "^libwww-perl*" block_bad_bots
Deny from env=block_bad_bots

RewriteCond %{HTTP_USER_AGENT} libwww [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)=http [NC]
RewriteRule ^(.*)$ – [F,L]



Samozrejme môžete chrániť svoje stránky aj pred spamovacími robotmi a inými útokmi z webu takýmto prostým zápisom.

<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/ico "access plus 1 month"
</IfModule>
<FilesMatch "\.(js|css|pdf|swf)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>
<FilesMatch "\.(html|htm|txt)$">
Header set Cache-Control "max-age=1209600, no-transform, must-revalidate"
Header set Content-Language "en"
Header set Pragma "Last-Modified" alebo "no-cache"
</FilesMatch>

ale dá sa to aj takto:

<IfModule mod_expires.c>
ExpiresActive On
<filesMatch "\.(png)$">
ExpiresActive on
ExpiresDefault "access plus 1 month"
Header unset ETag
</filesMatch>
<filesMatch "\.(ico)$">
ExpiresActive on
ExpiresDefault "access plus 1 month"
Header unset ETag
</filesMatch>
<filesMatch "\.(jpg)$">
ExpiresActive on
ExpiresDefault "access plus 1 month"
Header unset ETag
</filesMatch>
<filesMatch "\.(gif)$">
ExpiresActive on
ExpiresDefault "access plus 1 month"
Header unset ETag
</filesMatch>
<filesMatch "\.(css)$">
ExpiresActive on
ExpiresDefault "access plus 1 month"
Header unset ETag
</filesMatch>
<filesMatch "\.(js)$">
ExpiresActive on
ExpiresDefault "access plus 1 month"
Header unset ETag
</filesMatch>
<filesMatch "\.(xml)$">
Header set Cache-Control "max-age=604800, public"
Header unset ETag
</filesMatch>
<filesMatch "\.(xsl)$">
Header set Cache-Control "max-age=604800, public"
Header unset ETag
</filesMatch>
</IfModule>

Takto jednoducho alebo prosto nastavíme kešovanie ale dá s ato zapísať aj inak. Ako vychytávku príklad: Header set Cache-Control "max-age=1209600, no-transform, must-revalidate" tu je dôležité zapísať no-transform ktorý je dôležitý pre mobily a tablety.

<IfModule mod_speling.c>
CheckSpelling On
</IfModule>

Zaujímavý modul ktorý by nemal chýbať ak by vaše stránky navštívil slabozraký ale nevidiaci.

IfModule pagespeed_module> ModPagespeedDomain * ModPagespeed on ModPagespeedEnableFilters collapse_whitespace ModPagespeedEnableFilters combine_css ModPagespeedMaxCombinedCssBytes MaxBytes ModPagespeedEnableFilters insert_dns_prefetch ModPagespeedEnableFilters make_google_analytics_async ModPagespeedEnableFilters convert_jpeg_to_progressive ModPagespeedEnableFilters recompress_jpeg ModPagespeedEnableFilters rewrite_javascript ModPagespeedLazyloadImagesAfterOnload off /IfModule>

Môžete pozapínať všetky moduly ktoré urýchlia procesy napríklad tým že konvertujú obrázky na progresívny formát alebo odložia analýzu javascriptu analyticsu. Tu sa zapíše rovno do riadku:

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html;charset=utf-8 html
AddType text/css .css
AddDefaultCharset UTF-8
AddLanguage sk .sk # Slovak

Samozrejme nikdy nie je dosť informácii v zdroji html a preto môžete riadiť povely aj z htaccess súboru.

<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|xsl|css|js|php|pl|otf|ttf|eot|svg|woff|xml)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^text/css.*
mod_gzip_item_include mime ^application/javascript.*
mod_gzip_item_include mime ^application/.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>

Mod gzip ako sa budú vaše súbory prenášať sieťou internetu. Preto je to k dispozícii aby to bolo rýchlejšie ako nezabalené. Nemusíte mať obavy prehladače a ich keše si vedia rozbaliť takéto súbory pred podaním prehiadaču návštevníka.

order allow,deny
deny from 00.000.00.000
allow from all

Takto môžete napríkald zakázať prístup IP adresy keď ste si istí že je to napríklad útočník na vaše stránky. Takto by mal vyzerať kompletne celý htaccess. Každý prázdny riadok určuje použitie nového modulu s príkazmi. Vyhnite sa v htaccesse zakomentovaniu a radšej nepotrebný príkaz vymažte.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^domena\.sk
RewriteRule ^(.*)$ http://www.domena.sk/$ [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index\.html
RewriteRule ^(.*)index.html$ http://www.domena.sk/$1 [R=301,L]

error docs
ErrorDocument 404 /404.html

SetEnvIfNoCase User-Agent "^libwww-perl*" block_bad_bots
Deny from env=block_bad_bots

RewriteCond %{HTTP_USER_AGENT} libwww [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)=http [NC]
RewriteRule ^(.*)$ – [F,L]

<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/ico "access plus 1 month"
</IfModule>

<FilesMatch "\.(js|css|pdf|swf)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>
<FilesMatch "\.(html|htm|txt)$">
Header set Cache-Control "max-age=1209600, no-transform, must-revalidate"
Header set Content-Language "en"
Header set Pragma "Last-Modified"
</FilesMatch>
<IfModule mod_speling.c>
CheckSpelling On
</IfModule>
<IfModule pagespeed_module>
ModPagespeedDomain *
ModPagespeed on
ModPagespeedEnableFilters collapse_whitespace
ModPagespeedEnableFilters combine_css
ModPagespeedMaxCombinedCssBytes MaxBytes
ModPagespeedEnableFilters insert_dns_prefetch
ModPagespeedEnableFilters make_google_analytics_async
ModPagespeedEnableFilters convert_jpeg_to_progressive
ModPagespeedEnableFilters recompress_jpeg
ModPagespeedEnableFilters rewrite_javascript
ModPagespeedLazyloadImagesAfterOnload off
</IfModule>
Opäť jednoduchý zápis na riadok:

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType text/html;charset=utf-8 html
AddType text/css .css
AddDefaultCharset UTF-8
AddLanguage sk .sk # Slovak

<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|xsl|css|js|php|pl|otf|ttf|eot|svg|woff|xml)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^text/css.*
mod_gzip_item_include mime ^application/javascript.*
mod_gzip_item_include mime ^application/.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>


order allow,deny
deny from 00.000.00.000
allow from all

Samozrejme nezabudnite na okolnosť, že každý hosting konfiguruje servery podľa svojích vlastných preferencií a tieto vzory zápisov sa nemusia vo vašom htaccesse funkčne spúšťať.


Ak potrebujete rozobrať problém alebo čokoľvek okolo webu tak píšte komentáre s url adresou webu.

Žiadne komentáre:

Zverejnenie komentára