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>