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 :
http://mydomain.com/var_1/value1/var_2/value2/
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à
http://mydomain.com/image1.gif
khi đưa vào website là :
Code:
<img src="image1.gif">
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 :
http://mydomain.com/var_1/value1/var_2/value2/
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 , , ,
takura viết 01:14 ngày 10/10/2018
rất đơn giản.bạn hãy tạo 1 biến cục bộ.Sau đó gọi nó ra.Ví dụ $home.
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.
phamquoc_truong viết 01:14 ngày 10/10/2018
Trời ạ ! Không !
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ư :
Code:
<script language="JavaScript" src="/Library/Library.js"></script>
trong trang :
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
phamquoc_truong viết 01:15 ngày 10/10/2018
Các pro đâu hết rồi ?
lovephp viết 01:24 ngày 10/10/2018
chỉ cần bạn chú ý cái này là ok.

+ 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)
Bài liên quan
0