Nacházíte se zde: Úvod Podpora Nápověda Často kladené dotazy .htaccess, mod_rewrite
.htaccess, mod_rewrite
Změny konfigurace webserveru
Individuální změny konfigurace webserveru pro vybranou (sub)doménu je možné provádět dvěma způsoby.
- Konfigurační soubor domény - změny v konfiguračním souboru domény jsou prováděny buď automaticky (při operacích z klientské sekce), nebo je provádějí naši administrátoři na základě autorizovaného požadavku z klientské sekce, nebo požadavku z kontaktního e-mailu. Přínosem tohoto způsobu změn konfigurace je vyšší bezpečnost a výkon dané aplikace, nevýhodou pak méně flexibilní provádění změn (zejména u mod_rewrite).
- Konfigurační soubor .htaccess - změny konfigurace jsou uvedeny v souboru s názvem
.htaccess
, který je umístěn na serveru v prostoru dané aplikace. Práce se souborem .htaccess je plně v režii uživatele. Používání .htaccess je třeba pro příslušnou (sub)doménu nejdříve povolit, ve výchozím nastavení není podpora .htaccess zapnuta.
Příkladem změn konfigurace je třeba nastavení přepisovacích pravidel pro mod_rewrite, chybové stránky, HTTP autentizace, změna názvu či pořadí úvodních souborů prezentace, úprava nastavení cachování obsahu, nebo změna nastavení PHP
.htaccess
Použití konfigurace pomocí souboru .htaccess si můžete zapnout pro svou (sub)doménu v klientské sekci, ve správě dané domény v části Webserver.
Používání .htaccess může vést ke snížení výkonu webserveru až o 20% (je to vlastnost této technologie), při použití nepovolené direktivy v .htaccess webserver pošle chybovou stránku 500 (Internal Server Error). .htaccess doporučujeme používat pouze zkušeným uživatelům!
V .htaccess povolujeme následující direktivy: FileInfo
, Indexes
, Limit
a Options=Indexes
, na serverech s PHP 5.4 a vyšším ještě AuthConfig
. Bližší informace k možným nastavením najdete v dokumentaci webserveru Apache na stránce http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride. Dané nastavení může být provedeno zároveň v konfiguračním souboru domény i v .htaccess. Nastavení v .htaccess má před nastavením v konfiguraci domény přednost, jedinou výjimkou je modul mod_rewrite, kde je to naopak.
Konfigurační soubor domény (VirtualHost)
Změny v konfiguračním souboru domény jsou prováděny buď automaticky (například nastavení chybové stránky nebo HTTP autentizace v klientské sekci), nebo je provádíme na základě autorizovaného požadavku, zaslaného z klientské sekce (v části "Zákaznická podpora"),
Požadavky na nastavení pravidel pro mod_rewrite posílejte e-mailem z kontaktní adresy vedené u dané domény v našem systému. Pravidla prosím posílejte jako přílohu (prostý text) k tomuto emailu. Ke každému požadavku nezapomeňte specifikovat, na jakou (sub)doménu má být nastavení aplikováno.
mod_rewrite
Pravidla pro mod_rewrite je možné nastavit dvěma způsoby. Buď se zanesou přímo do konfiguračního souboru domény (nastavení provádějí naši administrátoři po zaslání požadovaných pravidel), druhou možností je jejich uvedení v souboru .htaccess (nastavení provádí uživatel). Jsou-li pravidla nastavena oběma způsoby, přednost mají ta v konfiguračním souboru domény.
Dokumentaci a návod na sestavení pravidel pro modul mod_rewrite najdete na následujících stránkách:
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
http://httpd.apache.org/docs/2.2/misc/rewriteguide.html
Efekt pravidel nastavovaných do konfiguračního souboru domény se může lišit od chování pravidel napsaných přímo pro aplikaci v souboru .htaccess. Toto je vlastnost modulu mod_rewrite.
Příklady pravidel pro mod_rewrite
Na tomto místě předkládáme ilustrativní příklady některých často používaných pravidel pro přepisování adres pomocí modulu mod_rewrite. Jsou zde uvedeny příklady pro použití v souboru .htaccess a také v konfiguračním souboru domény. Rozdíly v použití jsou např. v tom, že výrazy v konfiguračním souboru domény začínají lomítkem (viz. níže uvedené příklady), a také zde nelze použít direktivu RewriteBase (ta je určena pro použití v souboru .htaccess).
RewriteEngine On RewriteRule ^/(.+).html$ /index.php?page=$1 [L]
-
Přesměrování domény example.com bez varianty www na variantu s www - přesměruje všechny požadavky na doménu http://example.com na stejné požadavky na http://www.example.com.
Příklad pro použití v souboru .htaccess:
RewriteEngine On RewriteCond %{HTTP_HOST} ^example\.com$ RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
Příklad pro použití v konfiguračním souboru domény:
RewriteEngine On RewriteCond %{HTTP_HOST} ^example\.com$ RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301,L]
-
Přesměrování domény example.com s variantou www na variantu bez www - přesměruje všechny požadavky na doménu http://www.example.com na stejné požadavky na http://example.com.
Příklad pro použití v souboru .htaccess:
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.example\.com$ RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
Příklad pro použití v konfiguračním souboru domény:
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.example\.com$ RewriteRule ^/(.*)$ http://example.com/$1 [R=301,L]
-
Přesměrování domény example.com s variantou www i bez www na jinou doménu - přesměruje všechny požadavky na doménu http://example.com nebo http://www.example.com na stejné požadavky na http://sub.example.com.
Příklad pro použití v souboru .htaccess:
RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ RewriteRule ^(.*)$ http://sub.example.com/$1 [R=301,L]
Příklad pro použití v konfiguračním souboru domény:
RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ RewriteRule ^/(.*)$ http://sub.example.com/$1 [R=301,L]
-
Přesměrování domény example.com s variantou www i bez www na konkrétní adresu - přesměruje všechny požadavky na doménu http://example.com nebo http://www.example.com na adresu http://sub.example.com/index.html.
Příklad pro použití v souboru .htaccess i v konfiguračním souboru domény:
RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ RewriteRule .* http://sub.example.com/index.html [R=301,L]
-
Přepis adresy typu /neco.html na /index.php?page=neco - stránky se "tváří" jako statické HTML.
Příklad pro použití v souboru .htaccess:
RewriteEngine On RewriteRule ^(.+).html$ /index.php?page=$1 [L]
Příklad pro použití v konfiguračním souboru domény:
-
Stejný případ jako v předchozím případě s tím rozdílem, že pravidlo je aplikováno pouze na požadavky do adresáře abc (tedy třeba http://www.example.com/abc/neco.html) - skript index.php je v tomto adresáři umístěn.
Příklad pro použití v souboru .htaccess:
RewriteEngine On RewriteRule ^abc/(.+).html$ /abc/index.php?page=$1 [L]
Příklad pro použití v konfiguračním souboru domény:
RewriteEngine On RewriteRule ^/abc/(.+).html$ /abc/index.php?page=$1 [L]
-
Požadavky typu /katalog/4651.html přepíše na /index.php?page=katalog&id=4651. Parametr page může obsahovat pouze písmena anglické abecedy, číslice nebo pomlčky, údaj za lomítkem musí být číslice.
Příklad pro použití v souboru .htaccess:
RewriteEngine On RewriteRule ^([a-zA-Z0-9-]+)/([0-9]+)\.html$ /index.php?page=$1&id=$2 [L]
Příklad pro použití v konfiguračním souboru domény:
RewriteEngine On RewriteRule ^/([a-zA-Z0-9-]+)/([0-9]+)\.html$ /index.php?page=$1&id=$2 [L]
-
Přesměrování z nezabezpečeného http na zabezpečené https připojení (pomocí SSL certifikátu).
Příklad pro použití v souboru .htaccess:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]
Příklad pro použití v konfiguračním souboru domény:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]
-
Přesměrování z nezabezpečeného http na zabezpečené https připojení (pomocí SSL certifikátu) pro konkrétní doménu.
Příklad pro použití v souboru .htaccess:
RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^(www\.)?domena\.cz$ RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]
Příklad pro použití v konfiguračním souboru domény:
RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^(www\.)?domena\.cz$ RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]
-
Požadavky na existující soubory a adresáře nebudou přepsány, všechny ostatní požadavky budou přepsány na skript /index.php.
Příklad pro použití v souboru .htaccess:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* /index.php [L]
Příklad pro použití v konfiguračním souboru domény:
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d RewriteRule .* /index.php [L]
Stejný efekt, jinak konstruovaná pravidla:
Příklad pro použití v souboru .htaccess:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_FILENAME} -d RewriteRule .* - [L] RewriteRule .* /index.php [L]
Příklad pro použití v konfiguračním souboru domény:
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -f RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -d RewriteRule .* - [L] RewriteRule .* /index.php [L]
-
Ochrana proti hotlinkování obrázků do cizích webů - přímé požadavky na stažení obrázků daných typů přesměruje na vybraný obrázek obsahující informaci o blokování hotlinků. Pro domovskou doménu a další vybrané domény je nastavena výjimka z blokování, stejně tak pro požadavky s prázdnou HTTP hlavičkou Referer.
Příklad pro použití v souboru .htaccess i v konfiguračním souboru domény:
RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example\.com [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?your-other-domain\.com [NC] RewriteRule \.(jpg|jpeg|png|gif)$ http://example.com/hotlink_banned.jpg [NC,R,L]
Další příklady pravidel pro mod_rewrite najdete v sekci nápovědy o open source aplikacích.