Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Mod Rewrite przepisujący wszystko - problem
croc
post 6.11.2011, 17:09:58
Post #1





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Witajcie,

mam plik .htaccess zdefiniowany następująco:

Kod
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.+$ index.php?path=$0 [L]

Chcę, by przepisywane było wszystko, poza istniejącymi plikami. Foldery mają też być przepisane, bo nie zależy mi na dostępach do folderów bez podania pliku. Wszystko działa, ale jest pewien problem. Po wejściu na link z nazwą taką, jak istniejący folder, widoczna w linku staje się zmienna GET.

PRZYKŁAD:
Mam folder images. Po wejściu na http://localhost/images skrypt działa prawidłowo, ale w pasku adresu jest http://localhost/images/?path=images. Dla nazw niepokrywających się z folderami wszystko jest w porządku.

Co jest przyczyną tego zachowania?

EDIT
Dodam, że dla http://localhost/images/ (ze slashem na końcu) problem nie występuje.

Ten post edytował croc 6.11.2011, 17:11:15
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Sephirus
post 7.11.2011, 09:03:33
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Spróbuj dodać jeszcze:

Kod
RewriteCond %{REQUEST_FILENAME} !-d


To powinno omijać także foldery


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
by_ikar
post 7.11.2011, 09:53:11
Post #3





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


To nie ominie folderu niestety. Przyczyną może być to że apache najpierw przeszukuje dysk czy taki folder istnieje, a dopiero potem dopasowuje regułki zdefiniowane w htaccess. W przypadku kiedy podajesz slash na końcu, od razu szuka katalogu, tyle że u ciebie w rewritecond pominięte są katalogi i trzeba podać ścieżkę do pliku, więc szuka najpierw katalogu, potem pliku, nie znajduje pliku i dalej działa regułka z htaccess, tyle że już apache przekierowuje cię do katalogu, bo taki katalog znalazł. Nie wiem czy tak jest na pewno, ale tak mi się wydaje po przeanalizowaniu szybkim że tak to może działać. Rozwiązaniem może być stworzenie innego katalogu obrazów, albo innej regułki..

Ten post edytował by_ikar 7.11.2011, 09:56:46
Go to the top of the page
+Quote Post
croc
post 7.11.2011, 14:19:52
Post #4





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Celowo uniknąłem tego wpisu:
Kod
RewriteCond %{REQUEST_FILENAME} !-d

Tak jak wspomniałem w pierwszym poście, nie chcę blokować żadnych nazw, nawet takich pokrywających się z istniejącymi folderami. Bezpośredni dostęp do folderów jest mi po prostu niepotrzebny. Zależy mi, by każda nazwa dopasowana do wzorca kierowana była do index.php, oczywiście za wyjątkiem tych, które pokrywają się z rzeczywistymi plikami.
Go to the top of the page
+Quote Post
Sephirus
post 7.11.2011, 14:45:00
Post #5





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Ok racja mój błąd - nie doczytałem tego dokładnie (wybaczcie chory jestem :/).

Mam pewien pomysł, który może pomóc ale nie musi - nie mam jak sprawdzić ale co by było gdybyś dał coś takiego:

Kod
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.+[^/]{1}$ $0/ [L] // Można dać też flagę [R] zobaczyć która lepiej będzie działać

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.+$ index.php?path=$0 [L]


Jeśli dobrze napisałem to powinno być ok - co to robi? Pisałeś że jak jest "/" na końcu to działa bez zarzutu - to powinno dodawać "/" na koniec tylko do prawdziwych folderów i przekierować na adres "obsługiwalny" - nie wiem tylko jak twój skrypt sobie z tym poradzi i jakie dane dostanie podczas dodawania tego "/" - zależy to pewnie od flagi

HTH! wink.gif


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 12:54