.htaccess: Różnice pomiędzy wersjami

(Zabezpieczanie katalogu hasłem)
Linia 17: Linia 17:
 
RewriteEngine On
 
RewriteEngine On
 
RewriteCond %{SERVER_PORT} 80
 
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://{HTTP_HOST}%{REQUEST_URI} [R,L]
+
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Linia 69: Linia 69:
 
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.
 
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 <code>htpasswd -c /usr/home/''login''/hasla.passwd ''username''</code> oraz nadać uprawnienia odczytu <code>chmod +r /usr/home/''login''/hasla.passwd</code>. Folder, który ma być chroniony hasłem powinien zawierać plik .htaccess o następującej treści:
+
Plik z hasłami należy utworzyć dodając pierwszego użytkownika poleceniem <code>htpasswd -c /usr/home/''login''/hasla.passwd ''username''</code>. Folder, który ma być chroniony hasłem powinien zawierać plik .htaccess o następującej treści:
 
<syntaxhighlight lang="apache">
 
<syntaxhighlight lang="apache">
 
AuthType Basic
 
AuthType Basic
Linia 123: Linia 123:
 
RewriteRule ^(.*)$ http://domena%{REQUEST_URI} [R=301,L]
 
RewriteRule ^(.*)$ http://domena%{REQUEST_URI} [R=301,L]
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
==== Header set Cache-Control ====
 +
 +
Ustaw cacheowanie plików graficznych jako public oraz js i css jako private na 24h.
 +
 +
<syntaxhighlight lang="apache">
 +
<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>
 +
</syntaxhighlight>
 +
 +
Wyłącz cache plików html
 +
 +
<syntaxhighlight lang="apache">
 +
<filesmatch "\.(html|htm)$">
 +
  Header set Cache-Control "max-age=0, private, must-revalidate"
 +
</filesmatch>
 +
</syntaxhighlight>
 +
 +
==== 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.
 +
 +
<syntaxhighlight lang="apache">
 +
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"
 +
</syntaxhighlight>
 +
 +
Zamiast <code>access</code> można też wykorzystać:
 +
 +
*    now - to samo co 'access'
 +
*  modification - czas modyfikacji pliku
 +
 +
Przykładowo
 +
 +
<syntaxhighlight lang="apache">
 +
  ExpiresByType image/png "modification plus 1 year"
 +
</syntaxhighlight>
 +
 +
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
 +
  
 
[[Category:WWW]]
 
[[Category:WWW]]

Wersja z 23:54, 22 mar 2018

.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.

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. 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