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
有帮助,则进行探测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);