najlepiej to powinieneś mieć na końcu gdyż przekierowuje Ci jeśli nic nie znajdzie - jeśli przekierowanie nie poprawne lub coś w tym stylu:
Kod
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
... i reguła gdy powyższe spełnione
no i co najmniej na końcu jeden enter
same reguły htaccess po wykonaniu się wykonują się po raz kolejny by sprawdzić czy nie ma kolejnego dopasowania więc nie mogą za bardzo pasować reguły wyników do reguł szukania ;p - akurat tutaj najpewniej to Ci zapętla:
Kod
RewriteRule ^admin$ index.php/admin [L] //nawet jeśli ta linijka była by poprawna to przy następnym wglądzie w htaccess dopasuje do drugiej linii...
RewriteRule ^(.*)$ index.php/shop/$1 [L]
jak widzisz jedno pasuje do drugiego....
mało tego - zapętla się u Ciebie sama ta jedna reguła:
Kod
RewriteRule ^admin$ index.php/admin [L]
dokładnie nie wiem jaki masz adres i co chcesz osiągnąć ale jak już napisałem wynik przepisanego adresu nie powinwywać się do reguł szukanych gdyż plik jest przeglądany od początku z czego wynika zapętlenie....
tak więc u Ciebie powinna być mniej więcej taka kolejność:
Kod
RewriteEngine On
RewriteBase /
RewriteRule ^admin$ index.php/admin [L] // przy czym tą regułę na pewno ewidentnie trzeba zmienić - nie znam adresów więc nie jestem w stanie z palca wróżyć
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/shop/$1 [L]
przy czym jeśli chcesz się upewnić gdzie to Ci wszystko przekierowuje gdy ma się małe błędy o ile się nie zapętli to używaj jeszcze modyfikatora którego potem usuniesz [R=301,L]
no i przy tych ostatnich 3 linijkach to przekierowanie też jest trochu bez sensu gdyż powinno być w zasadzie to przekierowanie do tego samego adresu skoro nic nie może znaleść - czyli, np. do komunikatu, że dana strona nie istnieje...
i jeśli dalej nie masz przekierowań to w zasadzie z adresów pseudo statycznych powinno się przekierowywać do adresów php z parametrami get ;p