potęga pliku .htaccess
TRANSCRIPT
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]
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]
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 [email protected]
Dziękuję za uwagę