Tento článek vyšel před 16 lety. Můžete si jej přečíst v rámci zkoumání minulosti, ale přepokládejte, že dnes se Honza již nemusí s obsahem ztotožňovat.
Velmi často je součástí webového serveru tzv. mod_rewrite
, který nám povoluje přepisovat jakékoliv požadavky od uživatele na jiné. Například přepsat nebo přesměrovat adresu. Více o mod_rewrite
a souboru .htaccess
, jenž s ním úzce souvisí, najdete třeba na Jak psát web. Ta nejlepší helpka je však velmi pěkně napsaný originální manuál. Já se zkusím podělit o několik užitečných code snippets, které jsem časem nashromáždil…
Lomítka na koncích
Přesměruje adresy tralala.com/venku/je/tma
na tralala.com/venku/je/tma/
.
## endslashes
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !\/$
RewriteRule (.*) $0/ [R=301,NE,L]
Hezká a všelijaká URL pro aplikaci v PHP
Žádných složitých 50 regulárních výrazů na to, co vlastně s těmi adresami chceme… Stačí jeden kouzelný řádek, který úplně vše přesměruje na index.php
a potom si adresu rozparsujeme přímo v PHP (dostupná v $_SERVER['REQUEST_URI']
).
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Přesměrování RSS na FeedBurner
Chcete statistiky přístupů na vaše RSS, ale nechcete obtěžovat odběratele článků se změnami adresy? Přesměrujte je. Není to tak snadné jak se zdá, protože přesměrování se nesmí provést, když se na váš feed snaží dostat samotný FeedBurner (to se pak logicky zacyklí). Sofistikovanější postupy pro WordPress najdete v článku na AskApache, já jsem si vystačil s tímto:
## feedburner
RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator|Recent) [NC]
RewriteRule ^feed/?$ http://feeds.feedburner.com/javorovelistky [R=302,L]
Chybové stránky
Pokud zadáte relativní cestu, původní URL zůstane v adresním řádku prohlížeče a zobrazí se vám tato chybová stránka. Pokud zadáte absolutní, přesměruje se chyba zcela na soubor s chybovou stránkou (což podle mě není dobrý nápad).
## errorpages
ErrorDocument 404 /joss/?doc=_404
ErrorDocument 403 /joss/?doc=_403
Tatíček .htaccess
Neodolal jsem a nakonec ještě přidám několik osvědčených kousků i pro samotný .htaccess
. Někdy je dobré na web jen na oko zamezit přístup, alespoň přes hlavní stránku. Jelikož ta se většinou volá přes index.php
, teoreticky stačí vložit do rootu webu index.html
a něco do něj napsat. Toto zajistí, že se určitě bude HTML verze zobrazovat prioritně:
DirectoryIndex index.html index.php
Skryté soubory by se neměly nikomu dostat do rukou. Správný server má toto už v globálním nastavení, ale člověk nikdy neví…
<Files ~ "^[\.]">
Order allow,deny
Deny from all
Satisfy All
</Files>
Nevíte jestli na cílovém serveru bude mod_rewrite
a nechcete riskovat Internal Server Error 500? Stačí vše obalit podmínkou…
<IfModule mod_rewrite.c>
RewriteEngine on ...
</IfModule>
A co tak si nastavit PHP?
<IfModule mod_php5.c>
# development setting
php_flag display_errors 1
# safety
php_flag register_globals 0
# allowed stealing from other websites ;)
php_flag allow_url_fopen 1
# fu*king quotes...
php_flag magic_quotes_gpc 0
php_flag magic_quotes_runtime 0
php_flag magic_quotes_sybase 0
# yes, I love short open tags!
php_flag short_open_tag 1
# utf forever
php_flag default_charset utf-8
</IfModule>
Závěrem
Pokud byste měli nějaké další dobré tipy, podělte se v komentářích. Doufám, že se vám tyto útržky kódu budou hodit a usnadní vám život. Ne že bych byl expert na mod_rewrite
nebo nastavení Apache přes .htaccess
, ale už z toho co umím mohu usoudit, že jsou to opravdu silné a velmi užitečné nástroje, bez nichž bych si dneska pohyb po hostinzích nebo vlastním serveru představil jen stěží. Mnohdy je sice možné řešit totéž jiným způsobem, ale touto cestou je to mnohdy rychlejší, elegantnější a na pohled hezčí :) . Takže kdo s nimi ještě nezačal… Hurá do toho!