.htaccess (editace, specifika)

Obsah souboru .htaccess je součástí konfigurace Linux webserveru, nejčastěji je využíván k nastavení 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.
     

     


Editovatelné parametry

U sdíleného hostingu (balíčků Start, Komplet, Firma, Expert) nelze upravit pomocí .htaccesu úplně všechny parametry. 

Které parametry lze editovat určují hodnoty PHP_INI_USERPHP_INI_PERDIRPHP_INI_ALL. Lze je dohledat v oficiálním manuálu k PHP.

V rámci webhostingových balíčků sdíleného hostingu nelze editovat následující parametry:

doc_root
session.save_path 
open_basedir
memory_limit
upload_tmp_dir 
max_execution_time
error_log
upload_max_filesize
post_max_size

Pokud potřebujete některé tyto parametry upravit pro potřeby webové prezentace, bude nutné přejít na službu VMS, u které je možné provádět větší zásahy pro vlastní potřeby


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říklady 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 dle následujícího způsobu:

  1. Přihlašte se do Zákaznického centra.
  2. Zvolte hosting, na kterém si přejete adresář zaheslovat (Servery a hosting / Přehled serverů / doména / Nastavení serveru).
  3. V Detailu serveru klikněte u položky Editace souboru .htaccess na tlačítko Nastavení.
  4. Zde u příslušného adresáře zvolte možnost vytvořit dle šablony.
  5. Následně v sekci Přístup do složky zatrhněte možnost Přístup pouze s heslem, nastavte jméno chráněné oblasti, uživatelské jméno, heslo a klikněte na tlačítko Vytvořit htaccess.
TIP: Přehled již vytvořených přístupových údajů, včetně hesel (v šifrované formě) je k dispozici v Zákaznickém centru v editaci souboru .htaccess u možnosti "Hesla" (zde můžete přidávat také další uživatele) nebo na FTP v souboru .htpasswd. 
Pokud chcete přístup do adresáře opět povolit bez zadávání hesla, je nutné v příslušném souboru .htaccess smazat následující direktivu:

AuthType Basic
AuthName "jméno chráněnné oblasti"
AuthUserFile /cesta k souboru/.htpasswd
AuthGroupFile /dev/null
Require valid-user


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 u sdíleného hostingu nastavit nelze. Parametry je možné editovat u služby VMS, viz. níže:

Nastavení upload_max_filesize
php_flag upload_max_filesize 256MB (defaultní hodnota, lze změnit na vyšší)  

Nastavení memory_limit
php_flag memory_limit 256MB (defaultní hodnota, lze změnit na vyšší)

 # Nastavení max_execution_time
php_flag max_execution_time 120 (defaultní hodnota, lze změnit na vyšší, udává se v sekundách)

 # Nastavení post_max_size
php_flag post_max_size 256MB (defaultní hodnota, lze změnit na vyšší)

 

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 naleznete 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]

Header set Content-Security-Policy "upgrade-insecure-requests;"

Přidaná hlavička s hodnotou "upgrade-insecure-requests" zajistí řešení tzv. mixed contentu.