Jak wykluczyć katalog z przetwarzania reguł mod_rewrite (.htaccess) ?

Wykluczenie katalogu z obsługi reguł mod_rewrite

Wielokrotnie spotykamy się z koniecznością wykluczenie jednego, konkretnego katalogu z obsługi wyrażeń mod_rewrite. Przykład: chcemy uruchomić blog, którego pliki źródłowe znajdują się w podkatalogu „\blog\”. Jest wiele sposobów na rozwiązanie tego zagadnienia. Podstawowym problemem jest różnorodna konfiguracja tego modułu na poszczególnych serwerach lub hostingach (np. ograniczenie uprawnień do konkretnych funkcji mod_rewrite). Przedstawiam rozwiązanie proste, uniwersalne, które działa na większości serwerów z obsługą mod_rewrite poprzez plik .htaccess

Wyjątek mod_rewrite dla konkretnego katalogu

Rozwiązanie jest banalnie proste wystarczy umieścić w katalogu, który ma być wykluczony plik: .htaccess z następującą zawartością:

<IfModule mod_rewrite.c>

#wylaczanie regul dla katalogu
RewriteEngine Off

</IfModule>

Co dalej z regułami rewrite w katalogu ?

Wydaje się, że wyłączenie modułu przepisywania powoduje całkowitą dezaktywację tej funkcjonalności w danym katalogu. Nic bardziej mylnego. mod_rewrite przetwarza reguły według kolejności zapisu w pliku .htacces. W praktyce wygląda to tak, że najpierw wyłączamy moduł rewrite, a za chwilę ponownie go uruchamiamy i dzięki temu możemy nadal korzystać z jego funkcji. Jeżeli chcemy więc dodać nowe, oddzielne reguły dla katalogu, plik .htacces powinien wyglądać następująco:

<IfModule mod_rewrite.c>

#wylaczanie regul dla katalogu
RewriteEngine Off

</IfModule>

#ponowna aktywacja modulu i stosowanie regul
<IfModule mod_rewrite.c>
RewriteEngine On

(regula 1)
(regula 2)
itd...

</IfModule>