Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Mod rewrite
Forum PHP.pl > Forum > PHP
Sumo
Witam! Nie mogę sobie poradzić z mod_rewrite w serwisie opartym na MVC który próbuję napisać.
chciałbym, żeby .htaccess robił 3 rzeczy:
  1. przekierowywał wszystkie żądania do index.php, podając treść żądania po ukośniku. np, z strona.pl/costam1/costam2, robil strona.pl/index.php/costam1/costam2
  2. ...chyba, ze, odwołanie jest do pliku css, jpg etc; żeby nie utrudniać tworzenia layoutu
  3. sprawiał, że żadne odwołanie do pliku .php nie będzie działało

Niestety wszelkie moje próby osiągnięcia takiego efektu kończą się albo niczym, albo błędem 500; a tutoriali mod_rewrite czytałem chyba z 10.
Np. punkt 1szy wyobrażałem sobie tak:
Kod
RewriteEngine On
RewriteRule ^.$ index.php$1 [L]

Jednakże kod ten, nie wywołuje żadnego efektu.
Byłbym bardzo wdzięczny za pomoc w tej kwestii.
r4xz
Kod
^.$

robi tyle co:
^ - początek ciągu
. - jeden dowolny znak
$ koniec ciągu

rozwiązanie: zamiast . użyj .*

co do punktu 2. poczytaj o RewriteCond (+ REQUEST_FILENAME)
punkt 3. rozwiąże się wraz z punktem 2. wink.gif
Sumo
Hm,
RewriteRule ^(.*)/$ index.php$1 [L,QSA] czy
RewriteRule ^(.*)/$ index.php/$1 [L,QSA]
też nie pomaga;

co do 3 jest opcja, żeby zrobić to tak:
we wszystkich folderach, do których chcę zakazać dostępu utwórzyc pliki .htaccess i naklepać tam:
RewriteEngine Off
Deny From All.
brzmi to rozsądnie? include powinno działać mimo to?
adbacz
Zamiast:

RewriteRule ^(.*)/$ index.php$1 [L,QSA]

zrób:

RewriteRule ^(.*)$ index.php/$1 [QSA,L]
thek
Ale zapomniano dodać, że jeszcze dodatkowo dobrze sobie zrobić katalogi grupujące to, do czego chcesz dać dostęp bezpośredni. Dobrym pomysłem jest zrobić katalog typu "media" i w nim podkatalogi "css", "js" i inne. W htaccess definiujesz wtedy , że gdy istnieje w danym katalogu realny plik lub folder, to ma z niego odczytywać zamiast przekierować do indexu. Dobrym przykładem jest tu domyślny htaccess FW Kohana, który wygląda tak:
[APACHE] pobierz, plaintext
  1. RewriteCond %{REQUEST_FILENAME} !-f
  2. RewriteCond %{REQUEST_FILENAME} !-d
  3.  
  4. RewriteRule .* index.php/$0 [PT,L]
[APACHE] pobierz, plaintext

co można przetłumaczyć: jeśli wywołany plik nie jest plikiem lub katalogiem na serwerze, to przepisz adres na index.php/ścieżka i puść go do przetwarzania.
Sumo
adbacz, wciąż błąd 404 : (
thek,
Kod
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule .* index.php/$0 [PT,L]

działa, zaś samo
Kod
RewriteRule .* index.php/$0 [PT,L]

daje błąd 500.
Chciałbym tę drugą opcję, gdyż wolałbym, żeby użytkownik miał dostęp tylko i wyłącznie do jednego pliku php.

Pozdrawiam i dzięki
thek
Nie działa tak samo. Zwróć uwagę na warunki, bo to wyrażenie warunkowe. Bez niego http://www.domena.pl/plik.css zostanie wywołany jako http://www.domena.pl/index.php/plik.css a chyba nie o to chodzi. Dlatego taki warunek... "Przewalaj" na plik index.php tylko nie istniejące pliki i foldery. W ten sposób unikasz choćby przewalania plików obrazów, które teoretycznie także mogą być przez plik index.php przerzucane.
Sumo
Chodzi. Obrazy i wszystko wrzucę do jakiegoś webroot/media folderu i warunek będzie taki, ze jeśli to nie ten folder, to all do indexu.
Nie chcę, żeby userzy mieli dostęp do jakichkolwiek php/
thek
To wrzuć je do jednego folderu czy coś i ustaw mu brak dostępu. Znowu odsyłam do domyślnego htaccess Kohany wink.gif
[APACHE] pobierz, plaintext
  1. # Protect application and system files from being viewed
  2. RewriteRule ^(?:application|modules|system)\b - [F,L]
[APACHE] pobierz, plaintext

Sumo
Dobra, śmiga, wielkie dzięki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.