Vykonávání RewriteCond
Pokud napíšeme v souboru htaccess podmínku RewriteCond a je kladná, spustí se příkaz na dalším řádku. Pokud je záporná, jeden příkaz se přeskočí a pokračuje se následujícím.
Když napíšeme více RewriteCond příkazů za sebe, automaticky je mezi nimi logická spojka AND a pokud jsou všechny splněny, provede se první příkaz po všech podmínkách. Jinak je opět 1 přeskočen a pokračuje se dalším.
Příklad
Ukážeme si to na nejčastějším příkladu s kontrolou existence souboru.
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* /error/ [R] RewriteRule /img/.* /img/error.png [R]
Pokud budeme požadovat soubor který není soubor A není složka, budeme přesměrováni na adresu /error/. Problém je, že požadavku na jakýkoli soubor ve složce img dostaneme error.png i přesto, že požadovaný soubor může existovat.
Negace RewriteCond a skip
Abychom náš předchozí příklad zprovoznili, můžeme buď RewriteCond zkopírovat, aby byl 2x. Ale co když příkazů RewriteRule, které chceme v podmínce, bude třeba 8?
Jednodušší bude celou podmínku znegovat (soubor nebo složka existuje) a pokud ano, přeskočíme následující 2 pravidla RewriteRule.
RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule .* - [skip=2] RewriteRule .* /error/ [R] RewriteRule /img/.* /img/error.png [R]
Máte jiné řešení nebo tipy? Podělte se v komentářích nebo mě napište.
Úvodní obrázek obsahuje pozadí z Freepik
K tomuto článku již není možné přidávat další komentáře