2010-10-27 17 views
11

Jak mogę wyszukać instancję dla niektórych rozszerzeń plików, takich jak. (Jpg | png | css | js | php), a jeśli NIE jest zgodny, wyślij go do index.php ? route = 1 $.Przepisywanie w htaccess w celu dopasowania określonych rozszerzeń plików

Chciałbym móc zezwalać na okres dla niestandardowych nazw użytkownika.

więc przepisać http://example.com/my.name do index.php Trasa = my.name

Obecna konfiguracja:

.htaccess:

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^.]+)$ index.php?route=$1 [QSA,L] 
</IfModule> 

Co działa:
http://example.com/userpage -> index.php ? route = userpage
http://example.com/userpage/photos -> index.php? route = userpage/photos
http://example.com/file.js ->http://example.com/file.js
http://example.com/css/file.css ->http://example.com/css/file.css

Co muszę pracować oprócz wyżej:
http://example.com/my.name -> index.php trasa = my.name

Odpowiedz

19

Dodaj dodatkowe RewriteCond, aby wykluczyć warunki, których nie chcesz przepisać ponownie. Przed wyrażeniem regularnym użyj wartości !, aby wskazać, że jakiekolwiek dopasowanie plików powinno zakończyć się niepowodzeniem. Poniższy RewriteCond jest niesprawdzone, ale powinien dać wyobrażenie o tym, co trzeba:

RewriteCond %{REQUEST_URI} !\.(jpg|png|css|js|php)$ 
+0

Próbowałem tego i ma to sens, ale nie działa! – wdavis

+0

Połączyć to z _ilący_ kropkę w nazwach/trasach (tak, zastępując '[^.]' Z '.' w oryginalnym' RewriteRule' z twojego pytania). A.t.m, z siłą nie dopuszczasz kropki tam, więc oczywiście to nie zadziała. – Wrikken

+0

Ach, masz rację Wrikken. Zmodyfikowali regułę i połączyli się. Naprawdę doceniam pomoc facetów – wdavis

5

Czy próbowałeś odwrócenie logiki? Coś jak

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule \.(jpg|png|css|js)$ - [L] 

to nie zrobi przepisać dla każdego pliku z .jpg, .png, .css, .js lub rozszerzenia. Następnie dodaj istniejące reguły, aby żądania inne niż pliki, nie katalogowe, zostały przekierowane do index.php.

+0

Dzięki za wejściowego Harper, to pomogło mi to rozwiązać – wdavis

+0

tylko pamiętać, że -f jest straszna powolne w środowisku wysokich obciążeń jak to wymaga dostępu do systemu plików. checkin 'REQUEST_URI' jest znacznie szybszy! –

Powiązane problemy