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]
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.