joomla BASE HREF使用HTTP而不是HTTPS

时间:2013-11-01 18:40:54

标签: php apache joomla href http-status-code-303

我想将我的网站从http更改为https。总是

所以我相应地配置了我的apache。现在,当我输入我的网站的网址(https://steamnet.de)时,它会加载索引网站,但没有引用的元素(CSS,图像等)

在我看来,这样做是因为base href设置为http://steamnet.de/而thous不使用https。我已经配置了我的Firefox,它不应该加载混合内容。

那么我如何告诉Joomla将base href设置为https://steamnet.de(或以其他方式使网站完全ssl?)

我尝试将joomla配置的全局ssl enforce元素(德语中的“SSL erzwingen”,$force_ssl中的configuration.php)设置为“所有内容”,但随后网站中断了无限{{1}错误重定向到自身。 (作为事后的想法:我很惊讶在这里找到了303而不是303。如果有人能解释我会感激不尽)

Laoneo提出了一些解决方案,但没有解决,完整性在这里是列表)

  1. 301配置为$live_site网址。
  2. 探测更改https$sef是否有帮助。
  3. apache日志: $sef_rewrite

    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

4 个答案:

答案 0 :(得分:21)

对不起,我不认为目前的答案是对的。这个答案促进了黑客攻击并解决了这个问题。下次更新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 [&#39; HTTPS&#39;]似乎已初始化,Juri :: current将返回我们所期望的 - 一个以https开头的网址。

答案 1 :(得分:7)

检查configuration.php文件中的* $ live_site *变量,并将其更改为您的https地址。

答案 2 :(得分: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_ssl中禁用了configuration.php。我通过我的apache配置强制执行SSL,这对我来说不是问题。

答案 3 :(得分:0)

完全删除<base>标记可以解决您的问题。您可以在模板的index.php文件中执行此操作,如下所示:

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

由于这不是核心攻击,因此它将是升级版本。但是,如果您使用主题商店中的模板,并选择将来升级模板,则可能需要重新添加代码。

参考文献: