Przekierowanie do dyspozytora w index.php

0

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:

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.

0

poczytaj o wyrażeniach regularnych i znaczeniu okrągłych nawiasów ;)

ja mam tak:
RewriteRule ^(.*)/$ index.php?args=$1 [L,QSA]
i wszystkie żądania zapisane z ukośnikiem na końcu lądują w index.php (i w ten sam sposób pliki .css .jpg czy po prostu - pliki - nie są łapane, bo ich adres nie kończy się slashem)
pliki php oprócz index.php raczej trzymasz w folderach. więc po prostu we wszystkich folderach, do których chcesz zakazać dostępu utwórz pliki .htaccess i naklep tam:
RewriteEngine Off
Deny From All

0

Dzięki.
Hm, chcąc zrobić z strona.pl/argument/argument2 z strona.pl/index.php/argument/argument2 (taki format mi bardziej pasuje), próbowałem
RewriteRule ^(.)/$ index.php $1 [L,QSA]
RewriteRule ^(.
)/$ index.php$1 [L,QSA]
RewriteRule ^(.*)/$ index.php/$1 [L,QSA]
ale bez efektu (500 bądź brak strony)

0

Ale nie ogarniam.
Chcesz zrobić z:
strona.pl/argument/argument2
to:
strona.pl/index.php/argument/argument2

-- ale takie zapytanie nie ma sensu (dopóki index.php nie jest folderem)

Daj przykładowe adresy oraz na jaką formę chcesz je przerobić (najlepiej z 5 różnych przykładów), bo muszę Cię dobrze zrozumieć.

0

dzek69, ten kod niestety daje błąd 404 : (

w index.php mam "dyspozytor", który rozbija adres na elementy tabeli, względem znaku "/"; taka metoda wydaje mi się być najsensowniejsza, tym bardziej, że nazwy zmiennych nie są mi potrzebne na etapie dyspozytora

pozdrawiam

0

i jak zwykle ZERO konkretów jak się chcę czegoś dowiedzieć, żeby komuś pomóc.

Daj przykładowe adresy oraz na jaką formę chcesz je przerobić (najlepiej z 5 różnych przykładów), bo muszę Cię dobrze zrozumieć.

0

Przepraszam bardzo, piszę z telefonu (mam tu tez klienta ftp) co jest bardzo niekomfortowe. Chodzi mi dokładnie o to czym wspominałeś - chcę WSZYSTKO (poza mediami oczywiście) przekazać do index.php po ukośniku. Użytkownicy mają nie mieć dostępu do żadnych konkretnych plików php.

np strona.pl/nazwakontrollera/zmienna1/zmienna2/zmienna3
ma dojść na strona.pl/index.php/nazwakontrolera/zmienna1/zmienna2/zmienna3 (i to zamyka właściwie temat, ciężko podać inne przykłady bo wszystko chcę obsługiwać tym, co uważam za kontroler w php).

nie chcę pisać ?zmienna=costam, bo na etapie dyspozytora nie interesują mnie nazwy zmiennych - wszystko leci do tablicy, w której elementy odpowiadają wyrażeniom oddzielonym ukośnikiem

0

ale jak możesz docelowo robić index.php/blablalba --- przecież taki request nie ma sensu! Twoja ścieżka musi lecieć do jakiejś zmiennej, musi być jakoś nazwana. I w "dyspozytorze" jak to nazywasz już sobie parsujesz ścieżkę jak chcesz.
zrobisz sobie $tablica = explode('/', $_GET['args']) i już masz słit tablicę ze ścieżką.

0
dzek69 napisał(a)

ale jak możesz docelowo robić index.php/blablalba --- przecież taki request nie ma sensu! Twoja ścieżka musi lecieć do jakiejś zmiennej, musi być jakoś nazwana. I w "dyspozytorze" jak to nazywasz już sobie parsujesz ścieżkę jak chcesz.
zrobisz sobie $tablica = explode('/', $_GET['args']) i już masz słit tablicę ze ścieżką.

Taki request ma sens i nie, ścieżka nie musi lecieć do zmiennej i nie, nie musi być nazwana.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1
0

Leci do tablicy zmiennych, o indeksach odpowiadających kolejności podawania wartości.
Nazwy pojawiają się na etapie wywoływanych później funkcji; uznałem takie rozwiązanie za wygodniejsze.

w/w kod działa, dzięki, spełnia swoje zadanie, ale chciałbym usunąć linijki:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

,aby użytkownik miał dostęp tylko do jednego pliku, parsującego ścierzkę (index.php).
Niestety daje to błąd 500

0

A co, np. statyczny content trzymasz gdzieś indziej? Chyba nie chcesz, żeby /images/costam.png przetłumaczyło ci na /index.php/images/costam.png? Jeżeli obawiasz się o przypadkowe uruchomienie innych plików php (twojego frameworka / aplikacji) to powinieneś trzymać je poniżej wwwroot.

0

Myślałem o stworzeniu jakiegoś osobnego folderu na media, albo dodania warunku, który nie przekierowuje ścieżek zakończonych na .css, .jpg itp
Trzymać poniżej wwwroot, tzn?

Edytowano: deny for all, rzeczywiście wydaje się spełniać swoje zadanie. Pozdrawiam i dziękuję :)

0

Struktura katalogów wyglądała by mniej więcej w ten sposób:

/
   wwwroot/
      content/
         images/
         scripts/
      index.php
   application/
      controllers/

1 użytkowników online, w tym zalogowanych: 0, gości: 1