problem z .htaccess i mod_rewrite

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

Awatar użytkownika
ondreyos
Użytkownik
Posty: 331
Rejestracja: 2007-11-01, 17:31
Lokalizacja: Poznań

problem z .htaccess i mod_rewrite

Post autor: ondreyos » 2013-01-20, 23:48

Witam serdecznie.

Piszę, bo obawiam się, że z problemem (pomimo długich bojów) nie będę w stanie się uporać samodzielnie.

Kod: Zaznacz cały

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?adres=$1 [QSA]
To jest mój plik .htaccess. Założenie jest takie - najpierw, jeśli jest www na początku, to usuwamy. Następnie, jeśli żądany adres prowadzi do pliku, to nic się nie dzieje, natomiast w pozostałych przypadkach następuje przekierowanie na plik index.php, gdzie dostaję ścieżkę jako zmienną $adres i sobie ją w jakiś-tam sposób przerabiam (to, co z nią robię nie jest akurat w tej chwili istotne).

Problem dzieje się w następującej sytuacji:
mam katalog includes, w którym trzymam różne rzeczy (style, JavaScript, grafiki itp.)
Gdy wpisuję w przeglądarkę adres strona.pl/cokolwiek - przekierowanie działa, jest OK.
To samo się dzieje, gdy podam adres strona.pl/cokolwiek/ (istotne - cokolwiek nie jest ani katalogiem, ani plikiem, tylko wirtualną pozycją, do przemielenia przez mod_rewrite)
Gdy wywołam strona.pl/includes/ (ten slash na końcu ma znaczenie) pojawia mi się komunikat "forbidden" - czyli jest OK, apache informuje, że nie pokaże zawartości katalogu.
I ostatnia opcja, której naprawdę nie rozumiem - wpisujemy strona.pl/includes (bez slasha) i wprawdzie tez jest komunikat "forbidden", ale ponadto zmienia się adres w pasku adresu na strona.pl/includes/?adres=includes.
Szukałem w necie, ale niczego nie udało mi się ustalić. Dodawanie lub usuwanie RewriteCond !-d nic nie zmienia.

Żeby jeszcze namieszać:
przy adresie strona.pl/includes/cokolwiek - tez się przekierowuje poprawnie (także, jak dodam kolejne slashe i dalsze poziomy zagłębienia).
W katalogu includes jest katalog class.
i analogicznie - strona.pl/includes/class/ daje informacje o odmowie dostępu, natomiast wpisanie adresu bez slasha powoduje zmianę w pasku adresu na strona.pl/includes/class/?adres=includes/class

W żadnym z tych podkatalogów (ani includes, ani class) nie mam pliku .htaccess - więc musi to działać w oparciu o regułki przepisywania w głównym katalogu (tam, gdzie jest ten index.php, do którego trafiają wszystkie żądania)

Miałem pomysł, że opisany błąd może się jakoś wiązać z dziedziczeniem podkatalogów (jeśli chodzi o otrzymanie zasad przepisywania w spadku od rodzica), ale nie wiem, czy to był dobry trop. Dawałem osobny .htaccess do katalogu includes, w nim grzebałem, nawet dawałem RewriteEngine Off, ale za wiele to nie dało.

Jakiekolwiek pomysły? Bo mi już się totalnie kończą. Ewentualnie, jeśli uważacie, że ten plik .htaccess jest źle napisany - proszę o sugestie. Jedyne dwa założenia to - jak napisałem wcześniej - usunięcie WWW z początku i przekierowanie wszystkiego, co nie jest plikiem na index.php.

ODPOWIEDZ