2012-07-23 33 views
5

Tôi gặp sự cố lạ với điều kiện/quy tắc mod_rewrite.mod_rewrite không tải tệp css và js

Đây là điều kiện và quy tắc tôi đang sử dụng.

Vấn đề của tôi là nếu tôi truy cập www.example.com và www.example.com/page thì tải tốt nhưng khi tôi tải trang www.example.com/page/category nó tải trang nhưng không thể tìm css và javascript. Nó cố gắng tải chúng từ trang/css thay vì thư mục /.

Bất kỳ suy nghĩ nào về những gì tôi đã làm sai? Tôi đã có một tìm kiếm trên đây và thử một vài những việc như thêm

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

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

Nhưng điều đó dường như không làm cho nhiều sự khác biệt.

Thanks for reading

Trả lời

2

Vấn đề là viết lại im lặng sẽ không nói cho trình duyệt web của khách truy cập mà họ đang có trong thực tế nhìn vào một trang từ một đường dẫn thư mục khác nhau.

Vì vậy, yêu cầu/trang rời khỏi trình duyệt (chính xác) cho rằng nó đang xem tài nguyên nằm trong thư mục công cộng cấp cao nhất trên máy chủ web, cũng như các tệp hình ảnh và tệp CSS.

Nhưng yêu cầu/trang/danh mục khiến trình duyệt (sai) nghĩ rằng nó đang xem tài nguyên nằm trong thư mục con được gọi là trang. Vì vậy, khi trình duyệt gửi yêu cầu cho tệp CSS và tệp hình ảnh, nó sẽ yêu cầu máy chủ tìm kiếm chúng trong thư mục/trang/phụ, không thực sự tồn tại. Vì vậy, máy chủ trả về mã 404 khi trình duyệt cố gắng tìm nạp các tệp hình ảnh và CSS.

Một cách để giải quyết vấn đề này là thay đổi đường dẫn tới CSS, hình ảnh và các tài nguyên tham chiếu trang khác thành đường dẫn tuyệt đối. Bắt đầu chúng với dấu gạch chéo để chúng được neo liên quan đến thư mục công cộng cấp cao nhất thực tế. Đây có lẽ là cách tốt nhất để tiếp tục nếu bạn chỉ có một số lượng nhỏ đường dẫn tài nguyên để cập nhật. Ví dụ, thay đổi:

src="image-name.png" 

vào

src="/image-name.png" 

Điều này sẽ buộc các trình duyệt để yêu cầu các tập tin sử dụng một đường dẫn tuyệt đối chứ không phải suy ra sai vị trí dựa trên một đường dẫn tương đối.

Để loại bỏ sự cần thiết của một RewriteCond, bạn có thể thay đổi RewriteRule của bạn như sau:

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

này sẽ không phù hợp với bất cứ điều gì mà chứa dấu chấm (dot) biểu tượng, vì vậy yêu cầu cho các tập tin hình ảnh và CSS sẽ bị bỏ qua.

1

Bạn đã cân nhắc chỉ sử dụng base element và xóa "/" trước hình ảnh?

Các vấn đề liên quan