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:
1 2 3 4 | 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:
1 2 3 | 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:
1 | /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
1 | 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:
1 | AllowOverride FileInfo AuthConfig Limit Indexes |
jest to poprawny wpis.
Ponownie restartujemy Apache:
1 | /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:
1 | RewriteBase /~felixd/ |
dla http://localhost/~felixd/projekt2/:
1 | RewriteBase /~felixd/projekt2/ |