.htaccess¶
.htaccess to plik konfiguracyjny, który pozwala samodzielnie definiować zestawienia reguł rewrite. Jest zgodny ze "standardem" Apache i obsługuje go autorski moduł dla serwera NGiNX.
Plik .htaccess obsługiwany jest na stronach typu PHP. Nie należy edytować go edytorem tekstu automatycznie dodającym dodatkowe znaczniki BOM (może to spowodować błędne działanie dodanych reguł). W przypadku programu Notepad++ znak końca linii musi być [LF] (a nie [CR][LF]). Plik zalecamy edytować zdalnie po zalogowaniu się na konto poprzez SSH wykorzystując dostępne edytory (vi, nano, mcedit itd.). W razie potrzeby znaczniki BOM można usunąć w edytorze mcedit lub przy pomocy polecenia dos2unix dostępnym po zalogowaniu się na konto poprzez SSH.
Plik .htaccess może znajdować się w katalogu głównym domeny: /usr/home/login/domains/DOMENA/ bądź w dowolnym jego podkatalogu.
Uwaga
Błąd w składni pliku .htaccess spowoduje wyświetlenie na stronie komunikatu błędu 500.
Przykłady¶
Poniżej znajduje się kilka przykładów zastosowania tego pliku.
Przekierowanie na SSL¶
Przekierowanie domeny na szyfrowane połączenie SSL.
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
Obsługa zmiennej HTTPS¶
Umożliwia wykrywanie czy połączenie zostało nawiązane przy pomocy szyfrowanego połączenia SSL.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Przekierowanie subdomeny test.domena na domena/test bez tworzenia vhosta¶
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?test\.domena$ [NC]
RewriteCond %{REQUEST_URI} !^/test/
RewriteRule ^(.*)$ /test/$1 [L]
Przekierowanie za pomocą 301¶
- Przekierowanie dla jednej strony do
DOMENA:
Redirect 301 /strona.php http://DOMENA/strona.html
- Przekierowanie całej strony do
DOMENA:
Redirect 301 / http://DOMENA/
- Przekierowanie całej strony do
subkatalogu DOMENA:
Redirect 301 / http://DOMENA/subkatalog/
- Przekierowanie subkatalogu strony do DOMENA:
Redirect 301 /subkatalog http://DOMENA/
- Przekierowanie żądań do plików
htmldo plików z tą samą nazwą z rozszerzeniemphp:
RedirectMatch 301 (.*)\.html$ http://DOMENA$1.php
Hostowanie stron html bez rozszerzenia¶
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
Zabezpieczenie przed hotlinkowaniem obrazków¶
Hotlinkowanie to umieszczanie na stronie obrazków, które użytkownik pobiera z zewnętrznego serwera. Przykładowa blokada wygląda następująco:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://DOMENA$ [NC]
RewriteCond %{HTTP_REFERER} !^http://.*\.DOMENA$ [NC]
RewriteCond %{HTTP_REFERER} !^http://DOMENA/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://.*\.DOMENA/.*$ [NC]
RewriteRule .*\.(jpg|jpeg|gif|png|bmp)$ - [F,NC]
Zabezpieczanie katalogu hasłem¶
Istnieje możliwość zabezpieczenia całego katalogu na stronie hasłem (lub nawet całej strony WWW). W poniższych przykładach argument USERNAME należy zastąpić loginem wybranego użytkownika, a argument LOGIN loginem konta na serwerze SMALL.PL.
Plik z hasłami należy utworzyć dodając pierwszego użytkownika poleceniem htpasswd -c /usr/home/LOGIN/hasla.passwd USERNAME oraz nadać uprawnienia odczytu poleceniem chmod +r /usr/home/LOGIN/hasla.passwd. Katalog, który ma być chroniony hasłem powinien zawierać plik .htaccess o następującej treści:
AuthType Basic
AuthUserFile "/usr/home/login/hasla.passwd"
require valid-user
AuthName "Zabezpieczony katalog"
AuthUserFile wskazuje na plik, który utworzono wcześniej. Jest możliwość używania różnych plików z loginami i hasłami do różnych katalogów. Usuwanie użytkownika odbywa się za pomocą polecenia htpasswd -D /usr/home/LOGIN/hasla.passwd USERNAME.
Domyślne kodowanie plików tekstowych¶
W przypadku udostępniania plików .txt w których nie sposób określić kodowania znacznikiem meta bądź innych plików, w których nie ustawiono kodowania można wymusić prawidłowe wyświetlanie przez przeglądarki za pomocą dyrektywy AddDefaultCharset, np.
AddDefaultCharset utf-8
Blokowanie adresów IP¶
- Blokowanie konkretnego adresu IP:
<RequireAll>
Require all granted
Require not ip 123.123.123.123
</RequireAll>
- Blokowanie zakresów IP (123.123.123.1 - 123.123.123.254):
<RequireAll>
Require all granted
Require not ip 123.123.123.0/24
</RequireAll>
Blokowanie ze względu na domenę¶
Blokowanie dostępu do strony, jeśli wejście nastąpiło z domena.com lub domena.net:
RewriteEngine On
RewriteCond %{HTTP_REFERER} domena\.com [NC,OR]
RewriteCond %{HTTP_REFERER} domena\.net
RewriteRule .* - [F]
Blokowanie indeksowania zawartości¶
Blokowanie indeksowania zawartości katalogów/katalogu bez pliku index.html/index.php:
Options -Indexes
Parsowanie strony jako XHTML/XML¶
Aby wymusić użycie przez przeglądarkę parsera XHTML/XML, należy dodać linijkę
AddType application/xhtml+xml .html
Przekierowanie adresu strony z www na adres bez www¶
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} www.DOMENA [NC]
RewriteRule ^(.*)$ http://DOMENA%{REQUEST_URI} [R=301,L]
Przekierowanie z domeny do subkatalogu tej samej domeny¶
RewriteEngine On
RewriteRule ^$ /subkatalog [L]
Header set Cache-Control¶
- Ustaw cache'owanie
plików graficznychjakopublicorazjsicssjakoprivatena 24h:
<filesMatch ".(jpg|jpeg|png|gif|ico)$">
Header set Cache-Control "max-age=86400, public"
</filesMatch>
<FilesMatch "\.(css|js)$">
Header set Cache-Control "max-age=86400, private"
</FilesMatch>
- Wyłącz cache plików
html:
<filesmatch "\.(html|htm)$">
Header set Cache-Control "max-age=0, private, must-revalidate"
</filesmatch>
ExpiresByType¶
- Ustaw czas wygaśnięcia cache dla
plików graficznychna rok od dostępu, miesiąc od dostępu dlacss,pdf,skryptów JavaScriptiplików flash, oraz domyślny czas wygaśnięcia na datę dostępu plus 3 dni.
ExpiresActive On
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 3 days"
- Zamiast
accessmożna też wykorzystać:
now - to samo co access
modification - czas modyfikacji pliku
Przykładowo
ExpiresByType image/png "modification plus 1 year"
Ustawi wygaśnięcie cache na rok od czasu modyfikacji pliku png.
Do modyfikowania czasu można wykorzystać słowa kluczowe:
- years
- months
- weeks
- days
- hours
- minutes
- seconds
Kompresja GZIP¶
Kompresję GZIP można ustawić bezpośrednio w panelu DevilWeb przy danej stronie w Strony WWW przy Szczegółach oraz poprzez polecenie Devil. Poniższy przykład nie wskazuje jak włączyć GZIP dla strony.
Aby serwować pliki, które zostały skompresowane uprzednio GZIP (są od razu zapisane w formacie GZIP w drzewie katalogów) przy założeniu, że mają rozszerzenie html_gzip, należy umieścić w pliku .htaccess następującą zawartość:
AddType text/html .html_gzip
AddEncoding gzip .html_gzip
RewriteEngine on
RewriteRule ^(.*)\.html$ $1.html_gzip [QSA,L]
<FilesMatch "(\.html_gzip)$">
Header append Content-Encoding gzip
</FilesMatch>