Ang*_*chs 14 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?)
我试图设置全局SSL(德语"SSL erzwingen",强制执行的Joomla配置的元素$force_ssl中configuration.php),以"一切",但随后该网站具有无限打破303错误重定向到自身.(作为事后的想法:我很惊讶地找到了一个303而不是在301这里.如果有人能解释我会感激不尽)
(Laoneo提出了一些解决方案,但没有成功,完整性在这里是列表)
$live_site到https网址.$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"
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
Dan*_*rov 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 = '://';
}
Run Code Online (Sandbox Code Playgroud)
问题是为什么有$ _SERVER ['HTTPS']显然没有初始化的服务器.虽然我不能告诉你为什么,我发现的工作是在开始时将这些行添加到.htaccess文件中:
<IfModule mod_env.c>
SetEnv HTTPS on
</IfModule>
Run Code Online (Sandbox Code Playgroud)
通过这样做$ _SERVER ['HTTPS']似乎被初始化,Juri :: current将返回我们期望的 - 一个以https开头的url.
检查configuration.php文件中的*$ live_site*变量,并将其更改为您的https地址.
注意:这是一个黑客攻击.请先测试Daniel Dimitrovs的答案.如果有效,请在此留言.
我找到了一个解决方法.
在文件中,includes/application.php我更改了以下块
if($router->getMode() == JROUTER_MODE_SEF) {
$document->setBase(JURI::current());
}
Run Code Online (Sandbox Code Playgroud)
至:
if($router->getMode() == JROUTER_MODE_SEF) {
$document->setBase(JURI::root());
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么JURI::current()返回一个httpURL而不是一个,https但在那个更改之后,该网站按预期工作.
小心:后更改管理员部分被打破,直到我禁用force_ssl在configuration.php.我通过我的apache配置强制执行SSL,这对我来说不是问题.