Řízení vlastností serveru pomocí souboru .htaccess

Soubor .htaccess byl implementován do webového software Apache proto, aby umožnil autorovi stránek měnit některé vlastnosti serveru a nemusel o tyto změny žádat správce serveru. Soubor .htaccess se umísťuje přímo do adresáře společně s obsahem webu a řídí vlastnosti serveru pro všechny soubory v tomtéž podadresáři a podsložkách. Přednost mají direktivy umístěné „hlouběji“.

Tečka na začátku jména souboru je jeho součástí a je povinná.

Řízení přístupu

Soubor .htaccess umožňuje řízení přístupu k adresářům. Omezení nastavená v souboru .htaccess jsou aplikována rekurzivně na všechny podadresáře. Řízení přístupu je možné pomocí uživatelského jména hesla, nebo pomocí IP adresy/doménového jména. Obě metody lze kombinovat a používat zároveň.

Řízení přístupu na základě IP adres

Pro povolení řízení přístupu na základě IP adres slouží direktiva Order deny,allow určující pořadí provádění jednotlivých pravidel. V případě, že je na prvním místě parametr deny budou nejdříve provedena všechna zakazující (Deny from) pravidla a teprve po nich všechna povolující (Allow from) pravidla. Co se stane pokud pořadí parametrů obrátíme je zřejmé. V pravidlech Allow from a Deny from můžeme používat jak IP adresy tak doménová jména.

První příklad ukazuje nastavení, kdy je zakázán přístup ze všech adres, kromě IP adres patřící doméně trustica.cz a jejím subdoménám.

Order Deny,Allow
Deny from all
Allow from trustica.cz

V druhém příkladě je povolen přístup z adresy trustica.cz, kromě badboys.trustica.cz.

Order Allow,Deny
Allow from trustica.cz
Deny from badboys.trustica.cz

Vyhodnocení pravidel při nastavení Order Allow,Deny proběhne v následujícím pořadí. Nejdříve je vždy vyhodnoceno implicitní nastavení, které zakáže kompletní přístup. Poté je provedena direktiva Allow, která povolí přístup z trustica.cz a na závěr je zakázán přístup z badboys.trustica.cz.

Je důležité nezapomínat na správné pořadí Allow a Deny. Pokud bychom tyto dva řádky prohodili, vykonal by se jen příkaz Deny.

Řízení přístupu na základě údajů uživatelské jméno:heslo

Další možností je řízení přístupu na základě dvojice údajů uživatelské jméno/heslo. Nejdříve je třeba autentifikaci pomocí hesla povolit direktivou AuthType basic tento druh autentifikace povolit. Pomocí direktivy Require určujeme skupinu uživatelů mající oprávnění pro přístup. Můžeme buďto pomocí parametru valid-user povolit všechny platné uživatele. Pokud místo parametru valid-user použijeme parametr user, můžeme vypsat seznam povolených uživatelů.

Následující část souboru .htaccess zajistí, že obsah složky, ve které je soubor .htaccess umístěn, bude přístupná pouze pro uživatele, kteří mají přihlašovací jméno a heslo v souboru .htpasswd.

AuthType Basic
AuthName "Zadejte přihlašovací údaje"
AuthUserFile .htpasswd
Require valid-user

Direktiva AuthName slouží pro nasatavení titulku přihlašovacího okna.

Pokud bychom chtěli umožnit přihlášení jen některým uživatelů ze souboru .htpasswd, pak změníme pouze direktivu Require.

AuthType Basic
AuthName "Zadejte přihlašovací údaje"
AuthUserFile .htpasswd
Require user bob alice

Výše uvedený příklad pak umožní přihlášení pouze uživatelům Bob a Alice.

Soubor se seznamem uživatelů se většinou jmenuje .htpasswd a obsahuje seznam uživatelů včetně jejich hesel. Cestu k tomuto souboru je třeba určit pomocí direktivy AuthUserFile relativně od kořene vašeho webu. Tento soubor server skrývá, nelze jej prohlížet přes web, takže hesla se nikomu nezobrazí.

Možnosti nastavení kombinace výše uvedených metod

Pokud kombinuje výše uvedené metody, je možné nastavit, aby k úspěšné autentizaci byla zapotřebí pouze jedna z nich. Toto lze provést pomocí direktivy Satisfy přidáním následujícího řádku do souboru .htaccess.

Satisfy Any

Omezení vypisování obsahu složek

Pokud na vašem webu vytvoříte složku, do které nakopírujete libovolné soubory, jsou tyto soubory viditelné pro všechny návštěvníky webu. Jejich zobrazování jde vyřešit triviálně vytvořením souboru, který Apache automaticky zobrazí (například index.html) místo obsahu složky. Může být i prázdný.

Ke stejnému účelu můžeme použít i soubor .htaccess. K zakázání zobrazení slouží direktiva IndexIgnore. Pokud chceme zakázat vypisování obsahu kompletně, použijeme jako parametr *.

IndexIgnore *

Můžeme však zakázat jen vypisování určitého typu souborů.

IndexIgnore *.jpg *.gif

Výše uvedený příklad zakáže vypsání souborů s koncovkou jpg a gif. Jednotlivé parametry direktivy se oddělují mezerou. Hvězdička zastupuje libovolný počet znaků (0..n). Pokud jméno souboru odpovídá alespoň jednomu parametru, pak se soubor ve výpise nezobrazí.

Vlastní chybové stránky

Pokud uživatel zadá neplatnou adresu stránky, dojde k chybě číslo 404 - Not Found a server vrátí stránku, která ho o tomto problému informuje. Pomocí .htaccess lze místo této výchozí chybové stránky použít vlastní.

ErrorDocument 404 http://www.trustica.cz/moje_chybova_stranka.php

Tato řádka zaručí, že v případě, že návštěvník stránky zadá adresu neexistující stránky, bude mu vrácena moje_chybova_stranka.php. Tuto modifikaci je možné provést pro různé stavové kódy. Vlastní chybou stránku lze nastavit pouze u chyb začínajících číslicí 4.

mod_rewrite

Mod_rewrite je modul pro webový server Apache, který slouží k přepisování obsahu adresy, která přijde jako požadavek serveru. Pokud tedy v prohlížeči zadáme například www.trustica.cz, dostane tuto adresu náš server, který ji předá modulu mod_rewrite. Mod_rewrite na základě pravidel definovaných v souboru .htaccess může adresu pozměnit. Pozměněnou adresu pak předá zpět webovému serveru, který na základě již upravené adresy, zpracuje požadavek. Po průchodu modulem, by tedy adresa mohla vypadat jako www.acitsurt.cz.

Mod_rewrite disponuje velikou konfigurovatelností, a její kompletní popis by byl nad rámec tohoto návodu. Proto ukážeme jen několik užitečných příkladů. Rozsáhlejší manual najdte například na této adrese: http://www.blogstorm.co.uk/htaccess-mod_rewrite-ultimate-guide/

Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo.
 -- Brian Moore

Sjednocení URL

Přístup na váš web je nejspíše možný přes několik URL. Např.

http://www.vaseadresa.com
http://vaseadresa.com
http://www.vaseadresa.com/index.html
http://vaseadresa.com/index.html

Poklud zadáte každou z těchto adres dostane zpět různou stránku, která se zdánlivě neliší. Jenže pokud zadáte http://www.vaseadresa.com budou všechny odkazy na této stránce začínat právě http://www.vaseadresa.com. Pokud na stránku zavítáte pomocí http://vaseadresa.com všechny odkazy budou začínat http://vaseadresa.com. Pomocí mod_rewrite je možné dosáhnout toho, aby pokud zavítáte na libovolnou adresu, byla tato adresa přepsána, a vy dostali vždy opravdu identickou stránku.

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^vaseadresa.com
RewriteRule (.*) http://www.vaseadresa.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.vaseadresa.com/ [R=301,L]

Podrobné vysvětlení jednotlivých řádek této ukázky je nad rámec tohoto návodu, nicméně každý sebepodivnější znak zde má svoji úlohu. Direktiva RewriteEngine povoluje mod_rewrite (Tuto direktivu je na našich serverch možné vynechat, neboť je použita již v celkovém nastavení našeho serveru.). Direktivou RewriteCond je definována podmínka pro aplikování pravidla, které je definováno pomocí direktivy RewriteRule.

Vytváření hezkých adres

Pro návštěvníka stránek může být problematické pracovat s adresou ve tvaru www.neco.cz/list.php?id=10. Pomocí mod_rewrite je možné dosáhnout toho, aby této adrese odpovídal například adresa www.neco.cz/list/10. Ta je pro absenci některých znaků jednodušší například pro zapsání.

RewriteEngine on
RewriteRule ^/list/([^/\.]+)/?$ list.php?id=$1 [L]

Direktiva RewriteRule říká, že pokud adresa vypadá /list/neco/ a to něco neobsahuje žádné lomítka ani tečky, vezme se to něco a předá se pomocí $1 do požadavku, který je odeslán serveru. Poslední lmítko ve vstupní adrese být nemusí. Parametr [L] říká, že přepsání adresy se provede lokálně, takže čtenář se o tom vůbec nedozví a uvidí pouze tu upravenou adresu.

Direktiva Options

Direktiva Options umožňuje povolení/zakázání některých vlastností serveru.

Při povolování vlastností máme dvě možnosti. První z nich je vyjmenovat seznam vlastností které chceme povolit. Všiměme si, že jednotlivé vlastnosti nepředchází znaménko +,-. Je důležité nezapomenout, že v tomto případě jsou všechny vlastnosti kromě vyjmenovaných zakázané.

Options vlastnost1 vlastnost2

Druhou možností je přidat/odebrat pouze konkrétní vlastnosti. Vlastnost, kterou chceme přidat předchází znak +, zakazovanou vlastnost pak předchází znaménko -.

Options +vlastnost1 -vlastnost2

Vlastnosti, které lze měnit

Indexes

Povolí výpis obsahu složky, pokud chybí DirectoryIndex (většinou index.html, nebo index.php).

FollowSymLinks

Povolí serveru sledovat symbolické odkazy. Místo cíle odkazu, vrátí obsah cíle odkazu.

Includes

Povolí Server Side Includes. Ty umožňují vkládat do jinak statických stránek direktivy, které server nahradí v okamžiku kdy si klient vyžádá stránku. Klient pak obdrží stránku, kde místo direktivy vidí výsledek jejího vykonání.

IncludesNOEXEC

Povolí stejnou vlastnost jako Includes, ale zákáže vykonávání direktivy #exec

příklad

Nísledující příklad zakáže zobrazení obsahu složky s chybějícím indexem a povolí Server Side Includes.

Options +Includes -Indexes
 
hosting/htaccess.txt · Poslední úprava: 30.07.2016 18:52 (upraveno mimo DokuWiki)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki */ ?> --> */ ?>