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?
- Editovatelné parametry
- Dědění nastavení
- Příklady nastavení
- Příklady nastavení PHP pro VMS
- Mod Rewrite
- Implementace HTTPS (.htaccess přesměrování)
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.
- Přihlaste se do Zákaznického centra.
- Zvolte hosting, na kterém si přejete .htaccess editovat (Služby / Hosting a servery / Virtuální servery).
- V Detailu serveru klikněte v kategorii .htaccess na tlačítko Nastavení.
- Zde zvolíte adresář, pro který chcete .htaccess editovat ( "/" je adresář kořenový - tedy www).
- 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:
- 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.
- Po přihlášení zvolte virtuální server, na kterém si přejete .htaccess editovat (Služby / Hosting a servery / Virtuální servery).
- V Detailu serveru klikněte v kategorii .htaccess na tlačítko Nastavení.
- Zde zvolíte adresář, pro který chcete .htaccess editovat ( "/" je adresář kořenový - tedy www).
- 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_USER, PHP_INI_PERDIR a PHP_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).
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:
- Přihlašte se do Zákaznického centra.
- Zvolte hosting, na kterém si přejete adresář zaheslovat (Servery a hosting / Přehled serverů / doména / Nastavení serveru).
- V Detailu serveru klikněte u položky Editace souboru .htaccess na tlačítko Nastavení.
- Zde u příslušného adresáře zvolte možnost vytvořit dle šablony.
- 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.
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 (na základě autorizované komunikace), viz níže:
# Nastavení upload_max_filesize
php_value upload_max_filesize 256M (defaultní hodnota, lze změnit na vyšší)
# Nastavení memory_limit
php_value memory_limit 256M (defaultní hodnota, lze změnit na vyšší)
# Nastavení max_execution_time
php_value max_execution_time 120 (defaultní hodnota, lze změnit na vyšší, udává se v sekundách)
# Nastavení post_max_size
php_value post_max_size 256M (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
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.