2011-10-27 19 views
21

我剛剛在我的網站中添加了SSL。當我去https://mydomain.com我看到的文字,但沒有CSS或圖像在那裏。它位於專用服務器上,我可以完全控制代碼。爲什麼圖像和CSS不顯示在HTTPS下?

所有路徑目前都是相對的。無論使用HTTP還是HTTPS,我都可以直接查看圖像和css。但是,當我加載一個頁面,他們沒有加載...

當我使用Firebug並在NET中看,我看到每個圖像302找到。那是什麼意思?

我需要做些什麼改變來確保http和https顯示網站的類似?

我是否將所有路徑設置爲絕對路徑?有沒有辦法讓一個改變影響所有人,或者我實際上必須去改變每一個?

謝謝。

回答

10

你有熱鏈接保護嗎?如果您嘗試禁用它。看看它是否有幫助。

+0

而不是禁用它,你可以寫(在你的htaccess中)像這樣:RewriteCond%{HTTP_REFERER}^http(s)?://(www \。)?XXX.com – user2992220

+4

什麼是熱鏈接保護? –

2

您並不需要絕對絕對,但您需要確保您的CSS和圖像可以通過SSL訪問。嘗試直接訪問它們,或使用Firebug或類似的瀏覽器工具來確定它試圖從哪裏加載它們。考慮使用「與協議相關的URL」,以便始終使用與頁面本身相同的協議(http或https)訪問CSS,圖像等。 http://paulirish.com/2010/the-protocol-relative-url/

+0

我可以看到我的圖像和CSS和HTTP和HTTPS,但顯然他們不加載。另外,當我轉到我的HTTPS頁面並在FF中查看源代碼,然後單擊CSS鏈接時,它會將我帶到HTTP ...但是,如果我單擊某個鏈接,而在HTTPS頁面上,則會將另一個頁面加載爲HTTPS。我有點困惑。 – santa

1

我有同樣的問題。如果頁面在https中打開,那麼css/js也應該在https中加載。我的意思是,加載css/js應該使用與打開html/jsp/jsf等頁面相同的協議。所以解決方案是不使用絕對URL爲CSS/JS。使用相對URL,而不是像這樣:

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

或使用本:

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

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

這應該解決圖像加載問題。

+0

您可以使用雙斜槓來指示絕對值,但使用相同的協議:例如「//css/myfile.css」。 – nickdnk

2

如果您使用絕對鏈接指向您的CSS(如http://www.yourcompany.net/yourcompany.css),它將不會在https中顯示CSS。如果你做出絕對https://www.yourcompany.net/yourcompany.css,它將在兩個電話中工作。