2012-07-23 15 views
5

Mam dziwny problem z regułą/regułą mod_rewrite.mod_rewrite nie ładowanie plików css i js

Jest to warunek i reguła, których używam.

RewriteEngine On 

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

RewriteRule ^(.*)$ index.php?params=$1 [QSA,L] 

Mój problem jest, jeśli mogę odwiedzić www.example.com i www.example.com/page ładuje w porządku, ale gdy próbuję załadować www.example.com/page/category ładuje stronę, ale nie mogę znajdź css i javascript. Próbuje załadować je ze strony/css zamiast z katalogu /.

Jakieś myśli o tym, co zrobiłem źle? Miałem wyszukiwania na tutaj i próbowała kilka rzeczy, jak dodać

RewriteCond $1 !\.(js|ico|gif|jpg|png|css|html|swf|mp3|wav|txt)$ 

i

RewriteRule ^(images|css|javascript)(.*)$ index.php?params=$1 [QSA,L] 

Ale to nie wydaje się robi dużej różnicy.

Dzięki za czytanie

Odpowiedz

2

Problemem jest to, że milczy przepisanie nie powie przeglądarkę odwiedzającego, że są one w rzeczywistości, patrząc na stronie z inną ścieżkę katalogu.

Tak więc żądanie/strona opuszcza przeglądarkę (poprawnie), myśląc, że patrzy na zasób znajdujący się w katalogu publicznym najwyższego poziomu na serwerze sieciowym, podobnie jak obrazy i pliki CSS.

Jednak żądanie/strona/kategoria opuszcza przeglądarkę (błędnie) myśląc, że patrzy na zasób znajdujący się w podkatalogu o nazwie strona. Kiedy więc przeglądarka wyśle ​​żądania dla CSS i plików graficznych, poprosi serwer, aby szukał ich w/page/sub-directory, która tak naprawdę nie istnieje. Tak więc serwer zwraca 404 kody, gdy przeglądarka próbuje pobrać obraz i pliki CSS.

Jednym ze sposobów obejścia tego problemu jest zmiana ścieżek do CSS, obrazu i innych zasobów odniesionych do stron do ścieżek bezwzględnych. Uruchom je z ukośnikiem w przód, tak aby były zakotwiczone względem rzeczywistego katalogu publicznego najwyższego poziomu. Jest to prawdopodobnie najlepszy sposób postępowania, jeśli masz tylko niewielką liczbę ścieżek dostępu do aktualizacji. Na przykład, należy zmienić:

src="image-name.png" 

do

src="/image-name.png" 

To zmusi przeglądarkę, aby zwrócić się do pliku za pomocą ścieżki bezwzględnej zamiast wywnioskować niewłaściwą lokalizację w oparciu o ścieżkę względną.

Aby usunąć potrzebę RewriteCond, można zmienić RewriteRule do następujących:

RewriteRule ^([a-z]+(?:/[a-z]+)*)$ index.php?params=$1 [QSA,L] 

Nie będzie niczego, co zawiera kropkę (kropka) symbol, tego zażąda dla wizerunku i CSS plików mecz być pominiętym.

1

Czy rozważałeś użycie tylko base element i usunięcie "/" przed obrazami?