Potęga pliku .htaccess

Post on 14-Apr-2017

234 views 1 download

Transcript of Potęga pliku .htaccess

POTĘGA PLIKU .HTACCESS

WOJCIECH KLOCEK

Joomla Day 2016 - Gliwice

Czym jest .htaccess ?

Plik sterujący zasadami zachowań serwera Apache

Jest odpowiednikiem web.config w IIS oraz pliku konfiguracyjnego NGiX

Pozwala zrobić dużo więcej niż Wam się wydaje

Co można zrobić za pomocą .htaccess

Ustawienia dostępówSzyfrowanie katalogówPrzekierowania URLUstawianie czasu przechowywania elementów witrynyUstawianie domyślnych aplikacji dla plików o danym rozszerzeniuWiele innych rzeczy

Ustawienia obsługi w konfiguracji Apache

Domyślnie mechanizm obsługi .htaccess jest włączony

Wyjątki:AllowOverride NoneAccessFileName .zabezpieczenia

Gdzie umieścić plik .htaccess?Katalog główny witrynyKatalog administracyjnyKażdy katalog witryny

Parę przydatnych informacji

CHMOD 644#komentarzKażda linia powinna kończyć się EnteremOstatnia linia pliku powinna być pusta

A teraz trochę przykładów praktycznego wykorzystania pliku .htaccess

Określanie domyślnego pliku strony www

DirectoryIndex index.html index.php jakisplik.html

DirectoryIndex strona-awarii.html

Zmiana powiązań typów plikówAddType text/html .txtAddType application/zip .zipAddType text/css .cssAddType application/x-httpd-php .phpAddType application/x-shockwave-flash .swfAddType application/pdf .pdfAddType video/x-ms-wmv .wmvAddType image/jpg .jpgAddType application/x-bittorrent .torrent

Zmiana powiązań typów plikówWymuszenie pobrania plikuAddType application/octet-stream .pdf .gz

Szybka zmiana kodowania dokumentówAddDefaultCharset ISO-8859-2

Typy MIME w mod_rewrite

AddType application/x-7z-compressed .7z

RewriteRule ^(.+\.php)s$ [T=application/x-httpd-php-source]

Blokowanie dostępu do strony wg domeny oraz blokowanie botów

RewriteCond %{HTTP_REFERER} niechciany\.com [NC] RewriteRule .* - [F]

RewriteCond %{HTTP_USER_AGENT} ^[Ww]eb[Bb]andit [NC,OR]RewriteCond %{HTTP_USER_AGENT} ^Default\ Browser\ 0 [NC,OR]RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [NC,OR]RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot\@yahoo\.com [NC,OR]RewriteCond %{HTTP_USER_AGENT} ^sitecheck\.internetseer\.com [NC,OR]

Blokowanie dostępu do strony wg adresu IP

deny from 123.456.789.000deny from all

deny from all allow from 123.456.789.000

Order allow, deny

Przypadek:order allow, deny deny from 123.456.789 deny from 000.123.4 allow from all

ForceType zamiast mod_rewriteJeśli mod_rewrite jest na serwerze wyłączony

Założenie: zamiast www.strona.pl/index.php chcemy wyświetlić www.strona.pl/index

DirectoryIndex index ForceType application/x-httpd-php

Dodatkowo:ForceType text/html

Dostęp do katalogówUżywany głównie do blokowania dostępu do zasobów przez inne witrynyOptions – Indexes

Options +Indexes

Options +Indexes IndexIgnore *gif *jpg *.png .?* g*

Szyfrowanie katalogówhttp://www.tools.dynamicdrive.com/password/http://www.htaccesstools.com/htpasswd-generator/

Tworzymy plik .htpasswd

Zawartość: użytkownik:hasłoNp. uzytkownik1:jf05LdXAvmanY

Tworzymy .htaccessAuthName \"Strefa zaszyfrowana\" AuthType Basic AuthUserFile /home/users/nazwakonta/public_html/joomla/.htpasswd AuthGroupFile /dev/null require valid-user

Własne strony błędówGłównie strony błędów 4xx i 5xx

ErrorDocument 404 /errors/404.htmlErrorDocument 404 http://www.jakasstrona.plErrorDocument 404 \"Brak dokumentu na serwerze - przepraszamy\"

Metaznaki w wyrażeniach regularnych

. – dowolny znak^ - początek ciągu$ - koniec ciągu+ - znak występujący raz lub więcej* - zero lub więcej wystąpień znaku? – zero lub jedno wystąpienie znaku! – negacja wyrażenia( - rozpoczęcie grupowania[ - rozpoczyna klasę znaków, np. [0-9]

Przyjazne linkiOptions FollowSymLinks RewriteEngine On RewriteRule ^index\.html$ index.php [L]

Założenie:www.strona.pl/artykul.php?id=24www.strona.pl/artykul-2.html

RewriteRule ^artykul-([^-]+).html$artykul.php?id=

Przyjazne linkiJ!RzeczywistośćAdres artykułu:strona.pl/index.php?option=com_content&task=view&id=1&Itemid=26

RewriteRule ([^-]+)/([^-]+)/([^-]+)/([^-]+)\.html$ index.php?option=&task=&id=&Itemid= [L]

RewriteRule (com_content)/(view)/([^-]+)/([^-]+)\.html$ index.php?option=&task=&id=&Itemid= [L]

Wygląd po zmianie:strona.pl/com_content/view/1/26.html

Przekierowania domenyZ www i bez www

Przekierowanie z WWW na adres bez WWW: RewriteCond %{HTTP_HOST} ^www.strona.com [NC] RewriteRule ^(.*)$ http://strona.com/ [R=301,L]

Przekierowanie bez WWW na WWW: RewriteCond %{HTTP_HOST} ^strona.com [NC] RewriteRule ^(.*)$ http://www.strona.com/ [R=301,L]

Morphic
Dlatego aby podpaść Google (a zwracają na to dużą uwagę) w związku z duplikacją treści warto zdecydować się na jedną z form adresu, a drugą przekierować.

Przekierowania domenyStara strona na nową:RewriteCond %{HTTP_HOST} ^stary_adres.com [NC, OR] RewriteCond %{HTTP_HOST} ^www.stary_adres.com RewriteRule ^(.*)$ http://www.nowy.com/ [R=301,L]

Sprawdzanie, czy przekierowanie nie prowadzi do katalogu bądź pliku:RewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-f RewriteRule .* index.html [L]

Morphic
Dlatego aby podpaść Google (a zwracają na to dużą uwagę) w związku z duplikacją treści warto zdecydować się na jedną z form adresu, a drugą przekierować.

Przekierowania ciąg dalszyPrzekierowania starych adresów podstron na nowe:

Redirect /katalog http://www.strona.pl/plik.php

Redirect 301 /kontakt-do-firmy.html /kontakt

SubdomenyPrzekierowanie subdomeny na odpowiedni katalog bez konieczności wprowadzania zmian w panelu administracyjnym domenyRewriteCond %{HTTP_HOST} sub.strona.pl RewriteCond %{REQUEST_URI} !sub/ RewriteRule (.*) sub/ [L]Wynik: www.strona.pl/sub

W drugą stronęRewriteCond %{HTTP_HOST} www.strona.pl [NC] RewriteCond %{REQUEST_URI} sub/ RewriteRule (.*) http://www.sub.strona.pl [L]Wynik:sub.strona.pl

SubdomenyW przypadku wielu subdomen:

RewriteCond %{HTTP_HOST} sub.strona.pl RewriteCond %{REQUEST_URI} !sub/ RewriteRule (.*) sub/ [L] RewriteCond %{HTTP_HOST} sub2.strona.pl RewriteCond %{REQUEST_URI} !sub2/ RewriteRule (.*) sub2/ [L]

SubdomenyOstatecznie:

RewriteCond %{HTTP_HOST} !^(www\.)?strona.pl$[NC] RewriteCond %{REQUEST_URI} ^(.+)/$

RewriteRule .* http://%1.strona.pl [L]

SubdomenyWykorzystanie wyrażeń regularnych:

RewriteCond %{HTTP_HOST} strona.pl [NC] RewriteCond %{HTTP_HOST} (.*).strona.pl [NC]

RewriteRule .* /%2%{REQUEST_URI}

I w drugą stronę:RewriteCond %{HTTP_HOST} strona.pl [NC]

RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule .* http://%1.strona.pl [L]

Flagi modułu mod_rewrite [R = kod] – pozwala na przekierowanie linku według podanej

wartości [QSA] – powoduje dodanie na końcu całego zapytania query

string [L] – ustanawia linijkę jako ostatnią, reguły występujące dalej nie

będą wykonywane [NC] – ignoruje wielkość liter wpisanego adresu [T] – ustawienie typu MIME [F] – zwraca błąd 403 [S = liczba] – pomija określoną liczbę reguł [N] – rozpoczyna przetwarzanie od początku

Więcej flag znajdziesz na:http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html.

Czasy przechowywania w pamięci podręcznej

<IfModule mod_expires.c>ExpiresActive onExpiresDefault "access plus 1 month„ExpiresByType text/css "access plus 1 year„ExpiresByType text/html "access plus 0 seconds„ExpiresByType application/javascript "access plus 0 seconds"ExpiresByType application/x-javascript "access plus 1 year"ExpiresByType text/javascript "access plus 1 year„ExpiresByType application/json "access plus 0 seconds„ExpiresByType application/xml "access plus 0 seconds"ExpiresByType text/xml "access plus 0 seconds„ExpiresByType application/atom+xml "access plus 1 hour„ExpiresByType image/jpeg "access plus 1 month„ExpiresByType font/opentype "access plus 1 month"

Zmiana wersji PHPW przypadku braku możliwości zmiany w panelu hostinguW przypadku braku obsługi php.ini

AddHandler application/x-httpd-php54 .php

Power .htaccess dla Joomla!

Plik dla Joomla 3.6.2

http://morphic.pl/upload/htaccess.rar

W przypadku pozostałych wersji proszę o kontakt na kontakt@morphic.pl

Dziękuję za uwagę