Przekierowania w pliku .htaccess
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]
Obsługa zmiennej HTTPS
Umożliwia wykrywanie czy połączenie zostało nawiązane przy pomocy bezpiecznego 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 wszystkich subdomen *.domena.pl na domena/* bez tworzenia vhostów.
RewriteEngine On RewriteCond %{HTTP_HOST} ^((?!www\.)[^.]+)\.domena\.pl$ RewriteCond %1::%{REQUEST_URI} !^(.*?)::/\1/? RewriteRule ^(.*)$ /%1/$1 [L,QSA]
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
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|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]
Przekierowanie z domeny do subfolderu tej samej domeny
RewriteEngine On RewriteRule ^$ /fsubfolder [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
Kompresja GZIP
Kompresję GZIP można ustawić bezpośrednio w panelu DevilWeb przy danej stronie w „Strony www” przy „Szczegółach” jak i poprzez 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ące konstrukty:
AddType text/html .html_gzip AddEncoding gzip .html_gzipRewriteEngine on RewriteRule ^(.*)\.html$ $1.html_gzip [QSA,L] <FilesMatch "(\.html_gzip)$"> Header append Content-Encoding gzip </FilesMatch> źródło: https://wiki.mydevil.net/.htaccess
Plik .htaccess
może znajdować się w katalogu głównym domeny: /usr/home/login/domains/domena/
bądź w dowolnym jego podkatalogu. .htaccess to plik konfiguracyjny, który pozwala samodzielnie definiować zestawienia reguł rewrite.
Odnośniki zewnętrzne
Błąd w składni .htaccess
spowoduje wyświetlenie na stronie komunikatu 500.