.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
html
do 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 graficznych
jakopublic
orazjs
icss
jakoprivate
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 dlacss
,pdf
,skryptów JavaScript
iplikó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
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>