.htaccess (editace, specifika)

Obsah souboru .htaccess je součástí konfigurace Linux webserveru, nejčastěji je využíván k natavení mod rewrite, můžete jím ale ovlivnit i jiné užitečné parametry. Některé příklady využití a syntaxe naleznete níže.
 

Jak soubor .htaccess vytvořit/editovat?
 

Buď pomocí nástroje, který je k dispozici v Zákaznickém centru - ten Vám jednak umožní editaci stávajících souborů, hlavní výhodou je ale možnost vytvoření nového souboru přes grafické rozhraní., případně můžete soubor klasicky vytvořit svým oblíbeným textovým editorem a přes FTP jej na server umístit do požadovaného adresáře.

  1. Přihlaste se do Zákaznického centra.
  2. Zvolte hosting, na kterém si přejete .htaccess editovat (Služby / Hosting a servery / Virtuální servery).
  3. V Detailu serveru klikněte v kategorii .htaccess na tlačítko Nastavení.
  4. Zde zvolíte adresář, pro který chcete .htaccess editovat ( "/" je adresář kořenový - tedy www).
  5. Do formuláře vypište požadovaný .htaccess záznam a následně změnu potvrďte kliknutím na tlačítko Uložit.
     

Podrobný postup:

  1. Pomocí svých přihlašovacích údajů se přihlaste do Zákaznického centra. Případně si můžete požádat o zaslání zapomenutého hesla.
  2. Po přihlášení zvolte virtuální server, na kterém si přejete .htaccess editovat (Služby / Hosting a servery / Virtuální servery).
  3. V Detailu serveru klikněte v kategorii .htaccess na tlačítko Nastavení.
  4. Zde zvolíte adresář, pro který chcete .htaccess editovat ( "/" je adresář kořenový - tedy www).
  5. Do formuláře vypište požadovaný .htaccess záznam a následně změnu potvrďte kliknutím na tlačítko Uložit.

Dědění nastavení


Nastavení v .htaccessu platí nejen pro adresář, ve kterém je soubor umístěn, ale dědí se také pro všechny adresáře v něm a níže (což někdy může např. u rewrite pravidel vadit).
Zděděné nastavení lze vždy "přebít" novým nastavením .htaccess v nižším adresáři (ze kterého nadále budou nastavení dědit jeho podsložky).
 

Důležité: nesprávné nastavení způsobí namísto zobrazení webu chybu "Internal Server Error"


Přiklady nejběžněji využívaných nastavení


 

Zaheslování přístupu do adresáře


Nastavit přístup do konkrétního adresáře pouze po zadání platného jména a hesla můžete v Zákaznickém centru v sekci Služby/Hosting a servery/Virtuální servery po kliknutí na název domény a volbě tlačítka "nastavení" u položky "Editace souboru .htaccess"." Zde u příslušné složky zvolte možnost "Heslo".

  1. Zde u příslušné složky zvolte možnost "Heslo".

  2. Následně nastavte přihlašovací údaje do daného adresáře a potvrďte je kliknutím na tlačítko Nastavit heslo.

TIP: Přehled již vytvořených přístupových údajů, včetně hesel (v šifrované formě) je v editaci .htpasswd v dolní části nastavení. Zde máte také možnost přístupy smazat (a tím znovu povolit přístup do adresáře bez hesla).

Nastavení Webserveru



Komentář - veškerý text, který je na řádku za znakem "#", je serverem ignorován
# Takto si můžete k nastavení zapisovat poznámky pro pozdější orientaci


Nastavení výchozích souborů (indexů) adresáře - výchozí nastavení 
# Názvy se oddělují mezerou, rozlišují se velká a malá písmena (index.php a Index.php jsou tedy 2 rozdílné soubory)


DirectoryIndex index.php index2.php TretiIndex.htm PosledniIndex.html


Vylistování obsahu adresáře - defaultně vypnuto
# Pokud v adresáři není žádný indexový soubor (viz DirectoryIndex výše), můžete si nechat vypsat jeho obsah


Options +Indexes


Nastavení vlastních chybových stránek
# Jako adresu lze uvést URL nebo relativní cestu - relativní adresa se uvádí od složky /www/

ErrorDocument 401 /cesta/soubor401.html # (umístění souboru je tedy /www/cesta/soubor401.html)
ErrorDocument 404 /cesta/soubor404.html
ErrorDocument 500 /cesta/soubor500.html
ErrorDocument 503 http://domena.cz/cesta/soubor.html


Řízení přístupu
# povolování/zakazování přístupu do adresáře podle IP adres

Allow from all # Defaultní nastavení - přístup povolen ze všech IP adres
Deny from all # Zamezuje přístup ze všech IP adres (např. PHP se ale lokálně do adresáře dostane)
Deny from 81.95.96.29 # Zablokování přístupu z konkrétní IP adresy
Deny from 81.95.96 # Zablokování přístupu rozsahu adres 81.95.96.xx


Nastavení PHP

Nastavení register globals
php_flag register_globals on/off

Nastavení magic quotes
php_flag magic_quotes_gpc on

Nastavení display errors
php_flag display_errors on

#Nastavení max_input_vars 
php_value max_input_vars 5000 (nebo jiné číslo dle Vaší potřeby)

Některá nastavení PHP (např. memory_limit) v .htaccess nastavit nelze  


 

Mod Rewrite


# před nastavením jakýchkoli pravidel je třeba rewrite zapnout
RewriteEngine On

# přesměrování domény neco.domena.cz do adresare domena.cz/adresar přes 301
RewriteCond %{HTTP_HOST} ^neco\.domena\.cz$
RewriteRule ^(.*)$ http://domena.cz/adresar [R,L]

# přesměrování domény neco.domena.cz do adresare domena.cz/adresar
RewriteCond %{HTTP_HOST} ^neco\.domena\.cz [NC]
RewriteCond %{REQUEST_URI}  !^/adresar/
RewriteRule ^(.*)$ /adresar/$1 [L,QSA]

# přesměrování z domena.cz/adresar na domena.cz - nezobrazuje se cesta do složky
RewriteCond %{HTTP_HOST} ^(www.)?domena.cz$
RewriteCond %{REQUEST_URI} !^/adresar/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /adresar/$1
RewriteCond %{HTTP_HOST} ^(www.)?domena.cz$
RewriteRule ^(/)?$ adresar/index.php [L]

Více informací k mod rewrite nalezente v dokumentaci:
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

Vypnutí eAcceleratoru

php_flag eaccelerator.enable 0
php_flag eaccelerator.optimizer 0


Implementace HTTPS (.htaccess přesměrování)


HTTPS je na Linux hostingu implementováno (stejně jako HTTP) pomocí reverzní proxy Nginx, která provádí tzv. TLS offloading.

Provoz mezi Nginx a Apache už se nešifruje a Apache se o šifrování dozví jen přeneseně. Z toho plynou následující omezení pro aplikace, které se snaží ověřovat, zda se na ně přistupuje přes zabezpečené HTTPS.

- detekce v PHP pomocí proměnné $_SERVER['HTTPS'] !='on' je plně funkční
- proměnná $_SERVER['SERVER_PORT'] obsahuje i při použití HTTPS číslo 80
- detekce v souboru .htaccess pomocí pravidel "RewriteCond %{SERVER_PORT} !^443$" a "RewriteCond %{HTTPS} !on" není funkční! Port v těchto případech bude vždy 8x, dle verze PHP a proměnná HTTPS je vždy Off. Místo proměnné %{HTTPS} je pro detekci potřeba používat proměnnou %{HTTP:X-Forwarded-Proto}.

Přesměrování na HTTPS se zachováním zpětné kompatibility proto doporučujeme provádět následujícími podmínkami:

RewriteEngine On

RewriteCond %{HTTPS} !on

RewriteCond %{HTTP:X-Forwarded-Proto} !=https

RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [L,QSA,NE]