S nástupem frameworků se stalo trendem používání různých způsobů "routingu" neboli nasměrování určité url na konkrétní třídu (controller), který se stará o odbavení a ve výsledku i zobrazení stránky na daném url. Dříve se na podobné činnosti používal zejména Apache modul mod_rewrite a jeho přepisovací pravidla. Ten se sice ještě stále používá, ale v drtivě většině na to, že nasměrujeme "všechno" do naší php aplikace, která se již postará o zbytek. Proto mě poměrně zásadně nedávno potrápilo použití mod_rewrite společně s mod_alias pro přesměrování.
Naprosto zásadní věcí totiž je, že o přesměrování zapsané v Apache přes direktivy Redirect a spol. se stará nikoli mod_rewrite, ale mod_alias, a to tak, že veškeré tyto přesměrování se zpracovávají až po přepisovacích pravidlech z mod_rewrite.
Předpokládejme zhruba tuto konfiguraci:
RewriteEngine On # framework RewriteRule ..... /index.php [L]
Za pravidlem se skrývá cokoli, nejčastěji množina pravidel, na tom nezáleží. Jde o to, že někde v php kódu, který se skrývá hluboko za index.php máme něco, co přesměrovává url /static.xml
někam na náš rychlý server se statickým obsahem - http://files.domain.net/static.xml
.
A teď se z neznámého důvodu rozhodneme optimalizovat výkon a zrychlit přístup k tomuto souboru tak, že přesměrování uděláme přímo v Apache a protože když už optimalizujme, tak pořádně, proto použijeme raději mod_alias a Redirect direktivy, která přeci musí zajistit rychlejší odbavení redirektu než přepisovací záležitosti mod_rewrite. Takže přidáme do konfigurace řádek
RedirectPermanent /static.xml http://files.domain.net/static.xml RewriteEngine On # framework RewriteRule ..... /index.php [L]
v domnění, že se nám ten redirect krásně uplatní před přepisováním. Ale ono smůla. Musíme do přepisovacích pravidel přidat vynechání static.xml
z přepisovacích pravidel, protože - jak bylo uvedeno výše - má přepisování z mod_rewrite přednost před přesměrováním z mod_alias.
RewriteEngine On # framework RewriteRule !/static.xml ...... /index.php [L] RedirectPermanent /static.xml http://files.domain.net/static.xml
Jaký je závěr? Nejraději se na celý proces optimalizace vykašlat a nechat toho co nejvíce na aplikaci, protože je to jasné duplikování, které může dělat jen potíže. To, co dělá mod_alias s redirektem, dělá i mod_rewrite a také i naše aplikace. Pokud to bude v aplikaci, bude to sice pomalejší, ale to zejména u permanentních redirektů, kterých je většina, to nějak zásadně nevadí. Vyvážené to bude lepší udržovatelností a možnostmi ladění, které jsou u aplikace lepší než ladit redirekty v konfiguraci Apache. Když už něco chtít přesouvat do Apache, tak raději Redirect direktivy z mod_alias vůbec nepoužívat a vše udělat v mod_rewrite direktivách.
Komentáře (0)
Komentáře jsou uzavřeny.