Sova v síti - 3/2 - vydáno 21.7.2003 Dobrý den, je zde druhé letošní číslo Sovy v síti :-) OBSAH + Úvod + Mod_rewrite pro lepší odkazy ÚVOD Jak jsem minule ohlásil, emialová Sova v síti již opět pravidelně vychází. Důkazem je toto její druhé letošní číslo. Najdete v něm článek Lukáše Oborského o přepisování URL na serveru Apache. Jedná se o techniku určenou již trochu pokročilejším webmasterům, její výhody jsou však univerzální. Pokud dáváte přednost HTML verzi článku, můžete si ho přečíst na adrese http://www.sovavsiti.cz/2003/mod_rewrite.html ... Z minulého čísla se vrátilo zpět asi 300 nedoručitelných zpráv. Nemalá část z nich však nejsou neplatné adresy, které jste si zaregistrovali, ale adresy mobilních telefonů, na které si poštu přesměrováváte. Několik desítek zpráv připadá též na automatické odpovědi v nepřítomnosti (a někdy i v přítomnosti). Není v mých silách vrácenou poštu pečlivě třídit, a proto vás prosím, abyste si buď automatické odpovědi zrušily (stejně vám nadělají víc škody než užitku), nebo si Sovu přeregistrovali na jinou adresu. Od příštího čísla již zruším z databáze čtenářů každou adresu, ze které přijde zpět automatická odpověď. ... Krásný den či večer vám přeje, Marek Prokop ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Denně aktualizované novinky, odkazy na články, zajímavé stránky: Weblog Sovy v síti -- http://www.sovavsiti.cz/weblog/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MOD_REWRITE PRO LEPŠÍ ODKAZY Lukáš Oborský V tomto článku se dozvíte, co je to mod_rewrite a jak pomocí něj můžete vylepšit odkazy na vaší webové stránce tak, aby byly srozumitelnější pro návštěvníky a vstřícnější k vyhledavačům. Jedním z nejpoužívanějších webových serverů je Apache [1]. Je napsán s důrazem na otevřenost, což umožňuje přidávat rozšiřující funkce neboli krátce moduly. Modulů pro Apache [2] je celá řada, nás však dnes bude zajímat pouze jediný - mod_rewrite. Umí jen jednu věc, ale zato geniálně - překládat adresy. Číhá na serveru na každou požadovanou stránku, zkontroluje její adresu podle seznamu svých pravidel a pokud požadovaná adresa v seznamu je, aplikuje na ni konkrétní přepisovací pravidlo. == Proč používat mod_rewrite == Než vám povím, jak se mod_rewrite aktivuje a konfiguruje, krátce zmíním, s jakými typickými problémy vám může pomoci. + Vaše stránky se přesunuly na nové adresy a vy na ně chcete návštěvníky přesměrovat. + Vaše stránky mají příliš složité adresy. Nelze si je zapamatovat, špatně se posílají emailem, nevyjadřují obsah stránky, ani strukturu webu. + Dynamické stránky obsahují v adresách parametry a vyhledavače je neochotně indexují. + Chcete, aby adresy stránek byly nezávislé na použité technologii a potřebujete se tedy zbavit koncovek html, php, apod. == Praktický příklad použití mod_rewrite == Konkrétní příklad je desetkrát lepší než obecné povídání. Proto vám ukážu, jak jsem dva typické problémy řešil pomocí mod_rewrite přímo na našem weblogu Letem světem [3]. = Jak mod_rewrite aktivovat = Nejprve si ale musíme ukázat, jak se podpora mod_rewrite vůbec zapíná. V příslušném adresáři, pro který se mají pravidla uplatňovat, vytvořte soubor .htaccess a do něj vložte následující řádku: RewriteEngine on Od té chvíle bude pro daný adresář mod_rewrite aktivní. Zatím ale nic nedělá, protože ještě nejsou vytvořena žádná pravidla. Nuže pojďme se podívat, jaké problémy vyřešíme. = Přesun stránek do domény třetího řádu = Prvním problémem weblogu byla zdvojená adresa. Původně weblog sídlil na adrese www.oborsky.cz/weblog, ale později jsem z adresáře weblog udělal doménu třetí úrovně, takže nová adresa je weblog.oborsky.cz. Jak jsem ale zjistil ze statistik, přes novou adresu stále chodilo méně lidí než přes starou. To by ani tak nevadilo, protože obě byly funkční, ale Google trpěl schizofrenií a rozděloval svůj PageRank mezi obě přístupové cesty. Po pár dnech přemýšlení mne napadlo, že nejlepší by bylo na staré adrese vracet návratový kód HTTP 301, který signalizuje trvale přesunuté stránky a zároveň automaticky přesměruje na novou adresu. Tomu rozumí i Google a měl by oba PageRanky sečíst. Jak ale podstrčit kód 301 v případě přístupu přes starou adresu, když vše leželo stále v jednom adresáři? Snadno, vložíme-li do .htaccess následující dvě řádky (třetí řádka má být na konci druhé): RewriteCond %{HTTP_HOST} ^www\.oborsky\.cz RewriteRule ^index\.php$ http://weblog.oborsky.cz/index.php [L,R=301,QSA] Co ty dvě řádky znamenají? První, RewriteCond, určuje, za jakých podmínek se má pravidlo aplikovat. V tomto případě soubor .htaccess leží v adresáři weblog a proto se použije pouze v případě, že do tohoto adresáře míří požadavek návštěvníka. Prvním řádkem určíme, že následující pravidlo se použije pouze, když adresa bude začínat www.oborsky.cz. Půjdeme-li na weblog novou cestou, přes weblog.oborsky.cz, pravidlo se neaplikuje. Obsahem druhého řádku je samotné pravidlo přepisu adresy. První část obsahuje standardní vstupní stránku weblogu, index.php. Pro zápis je použito regulárních výrazů, pokud s nimi nejste úplní kamarádi, nastudujte patřičnou literaturu (např. Regulární výrazy v příkladech [4] od Lukáše Zapletala na Root.cz). Druhá část pravidla obsahuje cílovou podobu adresy, v našem případě tu samou stránku zpřístupněnou přes novou adresu. Následují parametry pravidla v hranatých závorkách. L znamená, že pravidla nehodláme řetězit, R indikuje fyzické přesměrování včetně příslušného návratového kódu HTTP. Skupina QSA pak říká, že případné předávané proměnné (tedy vše za otazníkem v adrese stránky) mají být do cílové adresy vloženy taky. Vyzkoušíme, prima, funguje to. = Jak udělat z dynamické adresy statickou = Druhý problém, který jsem řešil, byl snažší. Nelíbily se mi totiž adresy jednotlivých spotů weblogu. Adresa vypadala např. takto: http://weblog.oborsky.cz/index.php?p=1234567&c=1 Ukáži vám, jak pomocí jednoduchého pravidla mod_rewrite vytvoříte nové odkazy, které budou mít mnohem přívětivější podobu, třeba tuto: http://weblog.oborsky.cz/spot1234567.html Kromě toho, že je druhá adresa srozumitelnější a vyhledavače ji raději a častěji indexují, hovoří pro ni ještě jeden důvod. Weblog je nyní založen na PHP. Ale pokud někdy v budoucnu přejdu na jiný systém, třeba .NET, změní se adresa stránky na index.aspx a veškeré odkazy z jiných serverů přijdou vniveč. Pokud ale budu skutečnou adresu maskovat pod virtuální html stránku, odkazy budou fungovat vždy a všude. Jak bude tedy pravidlo vypadat? RewriteCond %{HTTP_HOST} ^weblog\.oborsky\.cz RewriteRule ^spot(.*)\.html$ http://weblog.oborsky.cz/index.php?p=$1&c=1 [L,QSA] První řádek je vám už z předchozího případu jasný. Co říká ten druhý (druhý řádek je zalomen)? Pokud někdo požaduje stránku na adrese začínající písmeny spot s koncovkou html, má se mu místo toho podstrčit adresa vedoucí na skutečný článek. Díky tomuto pravidlu nemusí stránky s příponou html vůbec existovat! Mod_rewrite totiž přemění adresu dřív, než Apache začne zjišťovat, zda stránka existuje. Vidíme také, že z hranatých závorek vypadlo písmeno R pro přesměrování. To způsobí, že místo klasického přesměrování se browseru pouze podsune obsah cílové stránky, aniž by se na ni skutečně přešlo. V adresním řádku prohlížeče proto nadále uvidíte spot1234567.html. Na dvou praktických příkladech jsem vám ukázal, k čemu můžete mod_rewrite použít. Samozřejmě není možné celou problematiku probrat na pár řádcích. Proto berte tento text spíše jako motivaci k dalšímu samostudiu. Pro začátek nabízím výborný dvojdílný seriál Což si tak trochu zapřepisovat? [5] od Michala Krause, který vyšel před dvěma lety v Root.cz. Kupodivu se dodnes jiný článek v češtině k dané tématice neobjevil. Přeji vám úspěšné bádání a hodně štěstí při přepisování. V případě jakýchkoliv dotazů k tématu mě můžete kontaktovat emailem nebo na ICQ 45441092. Viva mod_rewrite. Odkazy uvedené v článku: [1] Apache http://www.apache.org/ [2] Moduly pro Apache http://modules.apache.org/ [3] Letem světem http://weblog.oborsky.cz/ [4] Regulární výrazy v příkladech http://www.root.cz/clanek/1490 [5] Což si tak trochu zapřepisovat? http://www.root.cz/clanek/542 Další související odkazy: + Mod-rewrite v dokumentaci Apache 1.x http://httpd.apache.org/docs/mod/mod_rewrite.html + Mod-rewrite v dokumentaci Apache 2.x http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html + Průvodce k přepisování URL http://httpd.apache.org/docs/misc/rewriteguide.html + Dokumentace souvisejícího modulu mod_alias http://httpd.apache.org/docs/mod/mod_alias.html + Přepisování URL pro Windows IIS (via Google) http://google.com/search?q=url+rewriting+iis (c) 2003 Lukáš Oborský, mailto:lukas@oborsky.cz Poznámky Sovy v síti: + V článku popsaný postup předpokládá, že máte na serveru k dispozici mod_rewrite možnost měnit nastavení Apache přes .htaccess. V případě sdíleného hostingu tomu tak být nemusí. + V uvedeném postupu není ošetřen případ, kdy uživatel zadá URL bez úvodního www (tj. např. jen oborsky.cz). O autorovi: Lukáš Oborský, alias Lukin, je zakladatelem a hlavním přispěvatelem weblogu Letem světem, ve kterém denně naleznete užitečné rady, odkazy a aktuality týkající se webdesignu a tvorby webových stránek. HTML verzi tohoto článku naleznete na autorově webu na adrese: http://www.sovavsiti.cz/2003/mod_rewrite.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Ukázky z knihy CSS - Kaskádové styly pro webdesignéry http://www.sovavsiti.cz/css-pro-webdesignery/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A to je pro dnešek vše. Na shledanou za dva týdny. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Nechcete, nebo naopak chcete dostávat Sovu v síti? Odběr lze odhlásit odesláním zprávy na unsubscribe@sovavsiti.cz. Přihlásit se lze odesláním zprávy na subscribe@sovavsiti.cz, nebo formulářem na adrese http://www.sovavsiti.cz/. Chcete nám cokoli sdělit? Uvítáme vaše náměty, připomínky, kritiku, atd. na adrese mailto:redakce@sovavsiti.cz. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Není-li v konkrétním případě uvedeno jinak, je autorem publikovaných textů Marek Prokop. Tento ezin, nebo jeho část můžete volně šířit dále, pokud současně uvedete údaje o autorech a odkaz na Sovu v síti. _________________________________________________________________ Sova v síti -- (c) 2003 Marek Prokop -- http://www.sovavsiti.cz/