2013-11-01 152 views
13

我想將我的網站從http更改爲https。總是。joomla BASE HREF使用HTTP而不是HTTPS

所以我配置了我的Apache相應。現在,當我進入我的網站(https://steamnet.de)的URL加載索引網站的罰款,但被引用的元素(CSS,圖像等)的無

在我看來,它這樣做是因爲base href設置爲http://steamnet.de/並且在那裏不使用https。我已經配置我的Firefox,它不應該加載混合內容。

所以,我怎麼能告訴的Joomla設置base hrefhttps://steamnet.de(或以其他方式使該網站完全ssl?)

我試圖設置全局SSL強制執行的Joomla配置的元素(「SSL erzwingen」在德國, $force_sslconfiguration.php)到「一切」,但該網站打破了無限的303錯誤重定向到自己。 (在事後:我很驚訝地發現一個303代替301這裏如果有人可以解釋,我將不勝感激。)

Laoneo提出了一些解決方案,沒有工作了,爲了完整性這裏是名單)

  1. 配置$live_sitehttps url。
  2. 探針如果更改$sef和​​有幫助。

的Apache日誌: access.log

91.42.221.000 - - [03/Nov/2013:12:41:25 +0100] "GET/HTTP/1.1" 303 4854 "-" "Mozilla/5.0 (Gecko) Firefox/64" 
91.42.221.000 - - [03/Nov/2013:12:41:25 +0100] "GET/HTTP/1.1" 303 516 "-" "Mozilla/5.0 (Gecko) Firefox/64" 
91.42.221.000 - - [03/Nov/2013:12:41:25 +0100] "GET/HTTP/1.1" 303 516 "-" "Mozilla/5.0 (Gecko) Firefox/64" 

error.log包含接入不算什麼,但對reload

[Sun Nov 03 12:41:16 2013] [notice] Graceful restart requested, doing restart 
[Sun Nov 03 12:41:16 2013] [error] (9)Bad file descriptor: apr_socket_accept: (client socket) 
[Sun Nov 03 12:41:17 2013] [warn] RSA server certificate CommonName (CN) `Angelo Neuschitzer' does NOT match server name!? 
[Sun Nov 03 12:41:17 2013] [notice] Apache/2.2.16 (Debian) PHP/5.3.3-7+squeeze17 with Suhosin-Patch proxy_html/3.0.1 mod_ssl/2.2.16 OpenSSL/0.9.8o configured -- resuming normal operations 

回答

18

對不起,但我不認爲目前的答案是非常正確的。這個答案促進了黑客並解決了這個問題。下次您更新Joomla時,您必須更新核心文件,因爲它將被重寫。

其實,如果我們在對的getInstance的JURI代碼看,我們可以看到這一點:

// Determine if the request was over SSL (HTTPS). 
if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) 
{ 
     $https = 's://'; 
} 
else 
{ 
     $https = '://'; 
} 

的問題是,爲什麼有其中$ _ SERVER [「HTTPS」]顯然未初始化的服務器。雖然我不能告訴你爲什麼,我發現了什麼工作是加入該線在開始時的.htaccess文件:

<IfModule mod_env.c> 
    SetEnv HTTPS on 
</IfModule> 

通過這樣做,$ _ SERVER [「HTTPS」]似乎被初始化, Juri :: current將返回我們所期望的 - 一個以https開頭的URL。

+1

聽起來不錯。我沒有joomla了,我可以輕鬆測試這個。如果我曾經到過它,我會相應地標記它。在此之前,我會在我的答案中加上一個註釋。我很高興有一個更好的解決方案,然後我的黑客。 –

+0

我剛剛遇到同樣的問題,並且htaccess修復程序爲我工作。 –

+0

這是正確的解決方案,而不是黑客。如果您希望您的網站默認爲https://將config $ live_site var更改爲https:// {您的主機名},並且初始瀏覽器href將顯示爲http,則首頁上的所有鏈接都將正確包含https:/ /。而且,Googlebot現在會測試https版本,因此您的索引鏈接將隨着時間的推移而變爲https://。 – garth

6

以下行檢查* $ live_site *變量在您的configuration.php文件並將其更改爲您的https地址。

+2

謝謝,我只是嘗試這樣做(有和沒有'force_ssl' $),但它並沒有改變任何東西。 –

+0

我曾經使用過這個ssl重定向插件http://extensions.joomla.org/extensions/site-management/url-redirection/11326。你檢查了apache訪問/錯誤日誌嗎?有沒有關於重定向的提示。你的Joomla配置有什麼用於SEF設置?安裝了任何SEF擴展? – Laoneo

+0

我不知道'SEF'是什麼意思。我編輯內容的元素到問題中。 –

5

注意:這是一個黑客攻擊。請先測試Daniel Dimitrovs answer。如果有效,請在這裏留言。

我找到了解決辦法。

在文件includes/application.php我改變了以下塊

if($router->getMode() == JROUTER_MODE_SEF) { 
    $document->setBase(JURI::current()); 
} 

到:

if($router->getMode() == JROUTER_MODE_SEF) { 
    $document->setBase(JURI::root()); 
} 

我不知道爲什麼JURI::current()返回http網址,而不是一個https,但之後更改站點按預期工作。

小心:在改變之後,管理員部分被打破,直到我禁用force_sslconfiguration.php。我通過我的apache配置強制執行SSL,這對我來說不是問題。

0

完全刪除<base>標籤應該可以解決您的問題。您可以在index.php文件模板的這樣做:

$doc = JFactory::getDocument(); 
unset($doc->base); 

因爲這不是一個核心的黑客,這將是升級防。但是,如果您使用主題商店中的模板,並選擇在未來升級模板,則可能需要重新添加代碼。


參考文獻:

相關問題