09/10/2018, 23:08
gặp 1 trục trặc nhỏ khi dùng mod rewrite !
Mình đã dùng mod rewrite để viết lại đường dẫn thành :
tất cả đều ok trừ mỗi việc ảnh và các file như css, js . . . dùng đường dẫn tương đối không hoạt động.
Ví dụ 1 file ảnh của mình bình thường là
khi đưa vào website là :
nhưng khi địa chỉ thành http://mydomain.com/var_1/value1/var_2/value2/ thì địa chỉ của file ảnh lại biến thành :
dẫn đến lỗi không tìm thấy file ảnh. Các file khác dùng đường dẫn tương đối cũng bị tương tự. . .
Mình đã xem vnexpress, vietnamnet, dantri . . họ đều dùng đường dẫn tương đối . . . tại sao có thể được như thế ? Cách khắc phục trong trường hợp của mình như thế nào ? (ngoài cách đổi mọi thứ thành địa chỉ tuyệt đối).
Chờ tin , , ,
http://mydomain.com/var_1/value1/var_2/value2/
Ví dụ 1 file ảnh của mình bình thường là
http://mydomain.com/image1.gif
Code:
<img src="image1.gif">
http://mydomain.com/var_1/value1/var_2/value2/
Mình đã xem vnexpress, vietnamnet, dantri . . họ đều dùng đường dẫn tương đối . . . tại sao có thể được như thế ? Cách khắc phục trong trường hợp của mình như thế nào ? (ngoài cách đổi mọi thứ thành địa chỉ tuyệt đối).
Chờ tin , , ,
Bài liên quan
Dùng nó gán vào link hình anh ($home/images/abc.gif).
Như thế nếu bạn chuyển tên miền,hay gặp sự cố bạn chỉ việc chỉnh sửa từ datbase về cột home.
takura bạn vẫn chưa hiểu ý mình, mình có nói chuyển tên miền tên miếc gì đâu. . .
Dùng như thế thì thành ra đường dẫn tuyệt đối mất rồi.
Đây mấy trang web kia nó vẫn dùng đượng đường dẫn tương đối ví dụ như :
http://vnexpress.net/Vietnam/Van-hoa/2006/05/3B9EA064/
Vẫn dùng đượng đường dẫn tương đối nhưng trong khi đó file này ở :
http://vnexpress.net/Library/Library.js
+ với address là ......domain.com/index.php?u=1&y=2
thì <img src=anh.gif> sẽ load ảnh này ......domain.com/anh.gif (tương tự cho css file, js file, liên kết....)
+ với address là ......domain.com/1/2/
thì <img src=anh.gif> sẽ load ảnh này ......domain.com/1/2/anh.gif (tương tự cho css file, js file) và <img src=/anh.gif> sẽ load domain.com/anh.gif (tương tự cho css file, js file)
Do đó để khắc phục lỗi trên bạn cần thêm 1 biến gọi là $path, biến này được cấu hình tùy theo domain của bạn
ví dụ site bạn có domain là http://anh.***/zaza/ thì biến này sẽ nhận giá trị "/zaza/" hoặc site bạn có domain là http://anh.***/ thì biến này sẽ nhận giá trị "/"
và sử dụng như sau
<?php
..................
echo "<a href=".$path."forum/topic/5>Topic id 5</a>"; // Luôn đúng
echo "<img src=images/anh.gif>" // Ảnh này có thể không load được khi sử dụng chức năng mod rewirte
.....
?>
thực ra nếu bạn chắn chắn domain của mình luôn ở cấp 1 tức là chỉ có dạng domain.*** thì bạn chỉ cần luôn đặt "/" trước mỗi liên kết là ok, không cần đặt biến $path làm gì cho dài dòng
Đó là đối với php, còn một nguyên tắt chung khi có sử dụng mod_rewrite là đừng bao giờ thiếu dấu "/" trước mỗi liên kết
Giả sử, site bạn có cấu trúc
_domain.com/zanhd/img.jpg
_domain.com/zanhd/anhd/anh.html
thì trong trang anh.html, hãy tập cho mình thói quen là sử dụng <img src = "/zanhd/img.jpg"> hơn là viết <img src = "../img.jpg"> nếu trong đầu vẫn nghĩ đến mod rewrite!
Một ví dụ thực tế này là website _zidean.com
- bạn vào trang địa chỉ http://www.zidean.com/category.php?data_cate=photo (không sử dụng mod rewirte), sau đó bạn click vào một link bên category, sẽ load trang mới được
- bạn vào trang địa chỉ http://www.zidean.com/d/24044 (sử dụng mod rewirte), sau đó click vào một link bên mục category, sẽ báo page not found (nếu họ chưa fix lỗi này), thực ra họ quên thêm dấu "/" ấy mà. (đoán vậy)