Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php joomla BASE HREF使用HTTP而不是HTTPS_Php_Apache_Joomla_Href_Http Status Code 303 - Fatal编程技术网

Php joomla BASE HREF使用HTTP而不是HTTPS

Php joomla BASE HREF使用HTTP而不是HTTPS,php,apache,joomla,href,http-status-code-303,Php,Apache,Joomla,Href,Http Status Code 303,我想将我的站点从http更改为https。总是 因此,我相应地配置了apache。现在,当我输入我的站点的URL()时,它会很好地加载索引站点,但不会加载任何引用元素(CSS、图像等) 在我看来,这样做是因为base href设置为http://steamnet.de/和thou在那里不使用https。我已将firefox配置为不应加载混合内容 那么,我如何告诉Joomla将base href设置为https://steamnet.de(或以其他方式使网站完全ssl?) 我试图将joomla配置

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

因此,我相应地配置了apache。现在,当我输入我的站点的URL()时,它会很好地加载索引站点,但不会加载任何引用元素(CSS、图像等)

在我看来,这样做是因为
base href
设置为
http://steamnet.de/
和thou在那里不使用https。我已将firefox配置为不应加载混合内容

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

我试图将joomla配置的全局ssl强制元素(“ssl erzwingen”在德语中,
configuration.php
中的
$force_ssl
)设置为“everything”,但随后该站点因无限
303
错误重定向到自身而中断。(事后想:我惊讶地发现这里有一个
303
而不是
301
。如果有人能解释一下,我将不胜感激)

(建议了一些解决方案,但没有成功,为了完整起见,这里是列表)

  • $live_site
    配置为
    https
    url
  • 如果更改
    $sef
    $sef_rewrite
    有帮助,则进行探测
  • 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
    

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

    注意:这是一个黑客攻击。请先做测试。如果有效,请在这里给我留言

    我找到了一份工作

    在文件
    includes/application.php
    中,我更改了以下块

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

    我不知道为什么
    JURI::current()
    返回一个
    http
    URL而不是
    https
    ,但是在这一更改之后,站点会按预期工作


    小心:在那次更改之后,管理员部分被破坏,直到我在
    configuration.php
    中禁用了
    force\u ssl
    。我通过apache配置强制实施SSL,因此这对我来说不是问题。

    对不起,但我认为当前的答案并不正确。这个答案促进了黑客攻击并绕过了问题。下次更新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>
    
    
    SetEnv HTTPS on
    
    通过这样做,$\u服务器['HTTPS']似乎已初始化,Juri::current将返回我们期望的结果—一个以HTTPS开头的url。

    完全删除
    标记应该可以解决您的问题。您可以在模板的
    index.php
    文件中这样做:

    $doc = JFactory::getDocument();
    unset($doc->base);
    
    由于这不是一个核心黑客,它将是升级证明。但是,如果您使用主题存储中的模板,并选择在将来升级该模板,则可能需要重新添加代码


    参考资料:


    谢谢,我刚刚尝试了这个(有和没有
    $force\u ssl
    ),但它没有改变任何东西。我曾经使用过这个ssl重定向插件。您是否检查了apache访问/错误日志?是否有任何关于重定向的提示。您的Joomla配置中有哪些SEF设置?安装了SEF扩展吗?我不知道“SEF”是什么意思。我将内容的元素编辑到问题中。在Joomla配置中,您可以定义SEF(搜索引擎友好URL)设置。有一个选项可以使用mod rewrite技术。这就是我所说的。我使用SEF和重写技术。我试着改变,但没用。听起来不错。我再也没有joomla了,在那里我可以很容易地测试这个。如果我有机会做这件事,我会做相应的标记。在那之前,我将在我的答案中添加一条注释。我很高兴有一个比我的黑客更好的解决方案。我刚刚遇到同样的问题,htaccess修复程序对我有效。这是正确的解决方案,而不是黑客。如果您希望您的站点默认为https://change config$live\u site var为https://{your hostname},并且当初始浏览器href显示为http时,首页上的所有链接都将正确包含https://。此外,Googlebot现在还测试https版本,以便随着时间的推移,您的索引链接将更改为https://关于“为什么https server env没有正确初始化?”的问题,有时加密由Web服务器上方的某个网络基础设施负责,而这些Web服务器从未看到任何加密内容,因为它们都是加密的“清除http”。这就是为什么有时候,ServerEnv看起来是错误的:实际上它是对的,只是https在其他地方得到了处理。
    $doc = JFactory::getDocument();
    unset($doc->base);