我已经在我的Joomla网站上安装了一个安全解决方案,它建议将configuration.php文件放在Public_html文件夹上面,怎么可能呢?
如何告诉CMS识别新位置?
该解决方案在所有版本的Joomla CMS中都有效吗?如果不是,那么请 写:
第1名:Joomla 2.5解决方案。
第二名:Joomla 3解决方案。
答案 0 :(得分:3)
您需要修改位于包含文件夹中的 defines.php 文件。
特别是这一行:
define('JPATH_CONFIGURATION', JPATH_ROOT);
将JPATH_ROOT
更改为正确的路径。
但问题是您正在修改核心文件,因此如果更新更改了define.php文件,它将覆盖您的更改并将破坏您的设置。您需要重新编辑该文件。
同样,JPATH_CONFIGURATION
常量可以用于CMS中没有专门尝试获取configuration.php文件的其他内容,因此请确保在执行之前检查它是否会对cms的其他部分产生负面影响这在生产中。
或者,您可以直接更改 frameworks.php 文件(也在include文件夹中)以更改从中加载配置的位置
ob_start();
require_once JPATH_CONFIGURATION . '/configuration.php';
ob_end_clean();
只需将require_once行更改为正确的路径。
此外,由于这是一个核心文件,因此可以通过更新进行更改。但是,如果在cms的组件或其他部分中手动加载配置文件,这也可能会影响其他部分。
答案 1 :(得分:1)
简单回答就是不要这样做。这意味着您必须执行@Patrick建议 正确且 工作的内容,但这意味着编辑核心Joomla文件。这是 不是一个好主意 ,就像你的情况一样,如果你更新Joomla,你将不得不每次都执行此更改而你忘记了(很可能),您的网站将完全停止工作。
我强烈建议您找一个不同的“安全解决方案”,不需要修改任何核心Joomla文件。
如果您可以通过“安全解决方案”定义您的意思,那么可能会为您提供替代方案
答案 2 :(得分:0)
我没有去挖掘,因为这已经实现了,但是可以在不改变核心的情况下完成。 < / p>
Joomla在根目录中查找defines.php
,如果存在,则imports it。 然后,如果找到一个名为_JDEFINES
的常量定义,它就不会加载原始文件,完全有效地覆盖。
所以,如果你想覆盖定义它很容易,你要做的就是从defines.php
路径下复制webroot/includes/
文件的内容并将其粘贴到我们创建的文件中在webroot
。您可以根据自己的喜好更改以下常量。
define('JPATH_CONFIGURATION', JPATH_ROOT."/my/supersecret/directory");
现在还有还有一件事要做,然后我们就可以了:)
您必须将以下行添加到覆盖文件的顶部(defines.php
中的webroot
)。
define('JPATH_BASE', __DIR__);
define('_JDEFINES', 1);
此常量传达给定义已被覆盖的框架并相应地使用新文件(上次我检查时,在整个框架的大约10个不同的位置检查此标志/常量,例如。{{ 3}},所以它很重要)
此外,根据您在问题中的要求,我已经看到Joomla here和v2.5.0可以使用此功能。
修改:如果您希望管理员面板正常工作,请记住您必须对管理员文件夹重复相同的步骤,并记住管理员有自己的/includes/defines.php