.htaccess
.htaccess to plik konfiguracyjny, który pozwala samodzielnie definiować zestawienia reguł rewrite. Jest zgodny ze "standardem" Apache i obsługuje go autorski moduł do ngnix.
Plik .htaccess
nie należy edytować edytorem tekstu automatycznie dodającym dodatkowe znaczniki BOM (może to spowodować błędne działanie dodanych regułek). W przypadku 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, ee itd.). W razie potrzeby znaczniki BOM można usunąć w edytorze mcedit 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.
Błąd w składni .htaccess
spowoduje wyświetlenie na stronie komunikatu 500.
Spis treści
- 1 Przykłady
- 1.1 Przekierowanie na SSL
- 1.2 Przekierowanie subdomeny test.domena na domena/test bez tworzenia vhosta.
- 1.3 Przekierowanie za pomocą 301
- 1.4 Hostowanie stron html bez rozszerzenia
- 1.5 Zabezpieczenie przed hotlinkowaniem obrazków
- 1.6 Zabezpieczanie katalogu hasłem
- 1.7 Domyślne kodowanie plików tekstowych
- 1.8 Blokowanie adresów IP
- 1.9 Blokowanie ze względu na domenę
- 1.10 Blokowanie indeksowania zawartości
- 1.11 Parsowanie strony jako XHTML/XML
- 1.12 Przekierowanie adresu strony z www na bez www
- 1.13 Header set Cache-Control
- 1.14 ExpiresByType
Przykłady
Poniżej znajduje się kilka przykładów zastosowania tego pliku. Część z nich jest autorstwa użytkowników MyDevil.
Przekierowanie na SSL
Przekierowanie domeny na szyfrowane połączenie SSL.
RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,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 subfolderu domena:
Redirect 301 / http://domena/subfolder/
Przekierowanie subfolderu strony do domena:
Redirect 301 /subfolder http://domena/
Przekierowanie żądań do plików html do plików z tą samą nazwą z rozszerzeniem php:
RedirectMatch 301 (.*)\.html$ http://domena$1.php
Hostowanie stron html bez rozszerzenia
RewriteBase / RewriteCond %{http://domena} !(\.[^./]+)$ RewriteCond %{REQUEST_fileNAME} !-d RewriteCond %{REQUEST_fileNAME} !-f RewriteRule (.*) /$1.html [L] RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/$1 [R=301,L]
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|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 MyDevil.
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 chmod +r /usr/home/login/hasla.passwd
. Folder, 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 folderó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:
deny from 123.123.123.123
Blokowanie zakresów ip (123.123.123.1 - 123.123.123.254):
deny from 123.123.123.0/24
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 bez www
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} www.domena [NC] RewriteRule ^(.*)$ http://domena%{REQUEST_URI} [R=301,L]
Header set Cache-Control
Ustaw cacheowanie plików graficznych jako public oraz js i css jako private na 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 graficznych na rok od dostępu, miesiąc od dostępu dla css, pdf, skryptów JavaScript i plikó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 access
moż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