Reguły z mod_rewrite nie działają modułem userdir (Apache,Debian, Linux)
Parę dni temu znajomy poprosił mnie o pomoc przy uruchomieniu modułu mod_rewrite w Apache’u który dostarczony jest z Debianem. Problem przejawiał się tym, że nie działało przekierowywanie stron ładowanych modułem userdir (przykładowy adres strony: http://localhost/~uzytkownik/). Opiszę kroki jakie trzeba wykonać aby temat rozwiązać:
Najpierw sprawdźmy czy moduły rewrite i userdir są ładowane podczas uruchomienia Apache. Odpalamy funkcję phpinfo() i szukamy sekcji apache2handler, wiersza Loaded Modules. Tam, wśród różnych opcji, powinny znajdować się dwa interesujące nas pozycje (mod_rewrite oraz mod_userdir).
Jeżeli ich tam nie ma, przechodzimy do katalogu /etc/apache2/mods-enabled/, sprawdzając czy zawiera dowiązania symboliczne ładujące odpowiednie rzeczy:
root@venoma:/etc/apache2/mods-enabled# ls -al rewrite* userdir*
lrwxrwxrwx 1 root root 30 06-01 02:09 rewrite.load -> ../mods-available/rewrite.load
lrwxrwxrwx 1 root root 30 05-26 18:14 userdir.conf -> ../mods-available/userdir.conf
lrwxrwxrwx 1 root root 30 05-26 18:14 userdir.load -> ../mods-available/userdir.load
Jeżeli ich tam nie ma, tworzymy je poleceniem:
root@venoma:/etc/apache2/mods-enabled# ln -s ../mods-available/userdir.load
root@venoma:/etc/apache2/mods-enabled# ln -s ../mods-available/userdir.conf
root@venoma:/etc/apache2/mods-enabled# ln -s ../mods-available/rewrite.load
Restartujemy Apache:
/etc/init.d/apache2 restart
i ponownie odpalamy phpinfo(). Moduły powinny być już załadowane (założyłem tutaj, że odpowiednie pliki znajdują się w katalogu /etc/apache2/mods-available/)
Teraz otwieramy plik /etc/apache2/sites-available/default. W tymże pliku szukamy linii z opcją AllowOverride w sekcji <Directory /> , aby rewrite działał poprawnie, powinna ona wyglądać tak
AllowOverride All
Kolej na konfigurację modułu userdir. Otwieramy /etc/apache2/mods-enabled/userdir.conf, w którym nie powinna pojawić się pozycja AllowOverride None. Prawdopodobnie linijka będzie wyglądała tak:
AllowOverride FileInfo AuthConfig Limit Indexes
jest to poprawny wpis.
Ponownie restartujemy Apache:
/etc/init.d/apache2 restart
W tej chwili moduł rewrite będzie działał poprawnie. Problemem może okazać się jego użycie wraz z modułem userdir. Aby wszystko działało poprawnie, trzeba odpowiednio skonstruować plik .htaccess. Musi on zawierać dyrektywę RewriteBase:
Dla adresu np. http://localhost/~felixd/ powinna ona wyglądać tak:
RewriteBase /~felixd/
dla http://localhost/~felixd/projekt2/:
RewriteBase /~felixd/projekt2/

Najnowsze komentarze