2011-08-26 7 views
5

Nie jestem zbyt dobry z mod_rewrite, ale naprawdę potrzebuję go teraz.RewriteRule przekierowuje wszystko poza jednym folderem

Mam całą nową stronę internetową w folderze o nazwie site. Jeśli więc chcesz wejść na nową stronę, adres URL będzie wyglądał tak: http://domain.com/site/.... Teraz muszę wykluczyć site z adresu URL, ale nadal wskaż go na /site/, Z WYJĄTKIEM dla jednego folderu o nazwie upload. Jak mogę to zrobić?

Więc http://domain.com/anything.ext i http://domain.com/anyfolder wskazywałoby na http://domain.com/site/... wyjątkiem domain.com/upload który wciąż wskazuje na domain.com/upload.

To kolejne pytanie, czy jest to dobre rozwiązanie tymczasowe, czy nie ma to znaczenia (myślenie o szybkości i wydajności)?

Odpowiedz

7

(Zakładając, że wprowadzenie zasad w pliku .htaccess w katalogu głównym dokumentu) użyj:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^upload 
RewriteRule (.*) site/$1 [L] 

Jeśli wprowadzenie go do httpd.conf, trzeba go zmieniać nieznacznie:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/upload 
RewriteRule (.*) /site$1 [L] 

Jeśli chodzi o drugie pytanie, osobiście nie lubię mod_rewrite iz pewnością nie użyłbym go jako rozwiązania stałego, chyba że absolutnie musisz. Dzieje się tak dlatego, że mod_rewrite jest dość nieefektywny, szczególnie na zajętych serwerach, ponieważ musi uruchomić co najmniej jedno wyrażenie regularne na każde żądanie przychodzące. Powinieneś zawsze używać flagi [L], aby upewnić się, że nie są przetwarzane żadne dodatkowe reguły niż to konieczne.

Zawsze jest bardziej wydajne układanie katalogów w taki sam sposób, jak odnosi się do nich aplikacja. Powyższe powinno ci działać, ale staraj się nie pozostawiać go na miejscu zbyt długo.

Jestem pewien, że już to wiesz, ale here jest dokumentacją mod_rewrite.

+0

Kiedy go używam (.htaccess code) pokazuje błąd serwera wewnętrznego. Nie mogłem znaleźć tego, co jest nie tak. – Boyd

+0

Co oznacza dziennik apache, gdy pojawi się błąd? ;-) – DaveRandom

+0

Moja firma hostingowa jest bolesna w dupę. Nie wspierają problemów htaccess i dlatego nie chcą wysyłać mi żadnych dzienników. Mówili, że nie ograniczają żadnych funkcji htaccess. Zakładając, że mój kod jest w porządku, powinienem nadal kontaktować się z firmą hostingową lub może być inna przyczyna błędu wewnętrznego serwera? (nie zapominaj, że wyświetla się tylko wtedy, gdy .htaccess zawiera kod z góry) – Boyd

Powiązane problemy