2011-10-27 16 views
21

Właśnie dodałem SSL do mojej strony. Gdy przejdę do https://mydomain.com, widzę tekst, ale nie ma tam kodu ani obrazów. Jest na dedykowanym serwerze i mam pełną kontrolę nad kodem.Dlaczego obrazy i CSS nie wyświetlają się w HTTPS?

Wszystkie ścieżki są obecnie względne. Mogę przeglądać obrazy i css, gdy przechodzę do tych plików bezpośrednio, bez względu na to, czy korzystam z HTTP czy HTTPS. Ale kiedy ładuję stronę, której nie ładują ...

Kiedy używam Firebuga i szukam w NET, widzę dla każdego obrazu 302 Znaleziono. Co to znaczy?

Jakie zmiany należy wprowadzić, aby upewnić się, że witryna wyświetlająca http i https jest podobna?

Czy wszystkie ścieżki są absolutne? Czy istnieje sposób, aby dokonać pojedynczej zmiany, która wpłynie na wszystkich, czy też naprawdę muszę iść i zmienić każdego z nich?

Dzięki.

Odpowiedz

10

Czy masz ochronę hotlink? Jeśli próbujesz go wyłączyć. I sprawdź, czy to pomaga.

+0

Zamiast go wyłączać, możesz napisać (w swoim htaccess) coś takiego: RewriteCond% {HTTP_REFERER}^http (s)?: // (www \.)? XXX.com – user2992220

+4

Co to jest ochrona za pomocą hotlin? –

2

Nie musisz robić wszystkiego absolutnie, ale musisz się upewnić, że Twój CSS i obrazy są dostępne przez SSL. Spróbuj uzyskać do nich bezpośredni dostęp lub użyj narzędzia Firebug lub podobnego narzędzia przeglądarki, aby dowiedzieć się, skąd próbuje je załadować. Rozważ użycie "adresów URL zależnych od protokołu", aby CSS, obrazy i tym podobne były zawsze dostępne przy użyciu tego samego protokołu (http lub https), co strona. http://paulirish.com/2010/the-protocol-relative-url/

+0

Widzę moje obrazy i CSS z HTTP i HTTPS, ale oczywiście nie ładują się. Także, gdy wchodzę na moją stronę HTTPS i przeglądam źródło w FF, a następnie klikam link CSS, to prowadzi mnie do HTTP ... Ale jeśli kliknę link, na stronie HTTPS załaduje kolejną stronę jako HTTPS. Jestem nieco zdezorientowany. – santa

1

Miałem ten sam problem. Jeśli strona jest otwierana w https, to css/js powinno być również załadowane w https. Rozumiem przez to, że aby załadować css/js, powinien używać tego samego protokołu, który był używany do otwierania strony html/jsp/jsf etc. Rozwiązaniem jest więc nie używać bezwzględnego adresu URL dla css/js. Użyj względny adres URL zamiast tak:

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

ani używać tego:

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

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

To powinno rozwiązać problem ładowania obrazu.

+0

Możesz użyć podwójnego ukośnika, aby wskazać wartość bezwzględną, ale z tym samym protokołem: na przykład "//css/myfile.css". – nickdnk

2

Jeśli wskażesz na swój CSS łączem bezwzględnym (np. http://www.yourcompany.net/yourcompany.css), to nie pokaże CSS w https. Jeśli zrobisz to absolutnie https://www.yourcompany.net/yourcompany.css, będzie działać w obu połączeniach.

Powiązane problemy