Násobné podmínky v htaccess

htaccess, Tipy & triky

Jak vytvářet v podmínkách v souboru htaccess logické spojky OR, nebo jak aplikovat pro více RewriteRule stejnou podmínku? Obojí je možné a v tomto článku si popíšeme způsob, jak na to.

Násobné podmínky v htaccess

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