2011-10-27 2 views
21

Tôi vừa thêm SSL vào trang web của mình. Khi tôi truy cập https://mydomain.com Tôi thấy văn bản nhưng không có CSS ​​hoặc hình ảnh nào ở đó. Đó là trên một máy chủ chuyên dụng và tôi có toàn quyền kiểm soát mã.Tại sao hình ảnh và CSS không hiển thị dưới dạng HTTPS?

Tất cả các đường dẫn hiện tại đều tương đối. Tôi có thể xem hình ảnh và css khi tôi truy cập trực tiếp vào các tệp đó dù sử dụng HTTP hay HTTPS. Nhưng khi tôi tải một trang mà họ không tải ...

Khi tôi sử dụng Firebug và tìm trong NET, tôi thấy cho mỗi hình 302 Tìm thấy. Điều đó nghĩa là gì?

Tôi cần thực hiện những thay đổi nào để đảm bảo trang web hiển thị http và https tương tự?

Tôi có làm cho tất cả các đường dẫn tuyệt đối không? Có cách nào để thực hiện một thay đổi duy nhất ảnh hưởng đến tất cả hay tôi thực sự phải đi và thay đổi từng cái một?

Cảm ơn.

Trả lời

10

Bạn có bảo vệ đường truyền không? Nếu bạn đã cố gắng vô hiệu hóa nó. Và xem nếu nó giúp.

+0

Thay vì tắt nó, bạn có thể viết (trong htaccess của bạn) một cái gì đó như thế này: RewriteCond% {HTTP_REFERER}^http (s)?: // (www \.)? XXX.com – user2992220

+4

Bảo vệ hotlink là gì? –

2

Bạn không cần phải làm mọi thứ tuyệt đối, nhưng bạn cần đảm bảo rằng CSS và hình ảnh của bạn có thể truy cập qua SSL. Hãy thử truy cập chúng trực tiếp, hoặc sử dụng Firebug hoặc một công cụ trình duyệt tương tự để tìm ra nơi mà nó đang cố gắng tải chúng từ đó. Hãy xem xét sử dụng "URL tương đối giao thức" để CSS, hình ảnh và những thông tin như vậy luôn được truy cập bằng cùng một giao thức (http hoặc https) làm trang đó. http://paulirish.com/2010/the-protocol-relative-url/

+0

Tôi có thể xem hình ảnh và CSS của tôi với cả HTTP và HTTPS nhưng rõ ràng là chúng không tải. Ngoài ra khi tôi đi đến trang HTTPS của tôi và xem nguồn trong FF và sau đó bấm vào một liên kết CSS nó đưa tôi đến HTTP ... Nhưng nếu tôi nhấp vào một liên kết, trong khi trên trang HTTPS nó tải một trang khác như HTTPS. Tôi hơi bối rối. – santa

1

Tôi gặp vấn đề tương tự. Nếu trang được mở bằng https thì css/js cũng sẽ được tải bằng https. Bằng cách này tôi có nghĩa là, để tải css/js nó nên sử dụng cùng một giao thức như nó được sử dụng để mở trang html/jsp/jsf vv. Vì vậy, giải pháp là không sử dụng url tuyệt đối cho css/js. Sử dụng url tương đối thay vì như thế này:

<link type="text/css" rel="stylesheet" href="../css/style.css" /> 

HOẶC sử dụng này:

<% String contextPath=request.getScheme()+"://"+request.getServerName()"+":"+request.getServerPort()+request.getContextPath(); 

<link type="text/css" rel="stylesheet" href="<%=contextPath>/css/style.css" />

này nên giải quyết vấn đề hình ảnh tải.

+0

Bạn có thể sử dụng dấu gạch chéo kép để biểu thị tuyệt đối nhưng với cùng một giao thức: chẳng hạn như "//css/myfile.css". – nickdnk

2

Nếu bạn đang trỏ vào CSS của mình có liên kết tuyệt đối (như http://www.yourcompany.net/yourcompany.css), nó sẽ không hiển thị CSS bằng https. Nếu bạn thực hiện điều đó tuyệt đối https://www.yourcompany.net/yourcompany.css, nó sẽ hoạt động trong cả hai cuộc gọi.