Witam,

Mam dosyć dziwny problem z zachowaniem .htaccess. Wpierw wprowadzenie:

1. Struktura katalogu:
Kod
\public
\private
.htaccess
index.php

gdzie public jest katalogiem publicznym, private - katalog prywatny (całkowicie zabroniony dostęp przez przeglądarkę)

2. Plik .htaccess
Kod
RewriteEngine on
RewriteBase /test/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^(/public/)].*)$ index.php?q=$1 [QSA]

Jak widać wszystko co nie istnieje (poza katalogiem public) jest przekazywane w query stringu do pliku index.php.

Teraz zaczyna się problem:

- Dotychczas wszystko działało i nie zauważyłem problemów, aż nie zrobiłem przekierowania do login.html - adres: http://127.0.0.1/test/login.html
- Pojawił mi się błąd 404 (nie znaleziono obiektu).
- Aktualnie obojętnie co przekaże przez URI przechodzi do pliku index.php oprócz, UWAGA!: wszystkiego co zaczyna się na literę 'l' (małe L).
- Jeżeli przekaże LOGIN.html działa, jeżeli napiszę login, lizak, lubie, l*.html nie.

W tym momencie wymiękłem, innych plików .htaccess nie mam, w pliku konfiguracyjnym apache'a nic nie zauważyłem.

-------------------------------------------------

Mój błąd, i to poważny.

Rozwiązanie:

Bawiąc się odkryłem że nie mogą się zaczynać jeszcze na: u,i,o,p,u,b czyli public winksmiley.jpg
Z tego co wyszperałem w htaccess nie może być takiego grupowania jak w regexp (w nawiasach okrągłych).

Kod
RewriteEngine on
RewriteBase /test/

RewriteRule ^public/(.*)$ /public/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#
#skasowano
#
#RewriteRule ^([^(/public/)].*)$ index.php?q=$1 [QSA]
#
# i dodano
#
RewriteRule ^(.*)$ index.php?q=$1 [QSA]


Wymagane jest przekierowanie na public po to by wiedzieć że jakiś publiczny plik nie działa.
Moderatora proszę o zamknięcie.