【问题标题】:Install Joomla in a subdirectory在子目录中安装 Joomla
【发布时间】:2016-04-25 23:41:24
【问题描述】:

您可能知道,Wordpress 在设置中有一个选项,允许在子目录中安装站点,同时将站点 URL 作为主域。它类似于“站点 url”和“Wordpress url”。我正在 Joomla 中寻找类似的东西。我知道它没有内置选项,但如果可能的话,我宁愿不必移动所有文件。并且请向我解释一下,就像给一个五岁的孩子一样,以防万一:)

【问题讨论】:

    标签: joomla subdirectory


    【解决方案1】:

    要将整个 joomla 安装移动到服务器上的子文件夹 (http://example.com/subdir),但仍从根目录 (http://example.com) 访问它,我执行了以下操作:

    • 将整个安装移至子目录文件夹
    • 在 configuration.php 中,设置 $live_site = "http://example.com";
    • 还要更改 configuration.php 中的 tmp 和 log-folders
    • 将 .htaccess 文件添加到根文件夹:

    (代码由this excellent answer修改)

    RewriteEngine on
    RewriteCond %{THE_REQUEST} subdir/
    RewriteRule ^subdir/(.*) http://example.com/$1 [R=301,L]
    RewriteCond %{REQUEST_URI} !subdir/
    RewriteRule ^(.*)$ /subdir/$1 [L]
    

    修改默认的 joomla .htaccess 文件,现在位于 /subdir 文件夹中,以包含 RewriteBase:

    RewriteBase /subdir/
    

    经过这些修改后,似乎一切都按照应有的方式运行。

    【讨论】:

    【解决方案2】:

    您可以在您的 joomla 安装中覆盖文件 /includes/defines.php。将此文件复制到安装的根文件夹,然后将所有文件夹名称更改为您喜欢的设置。

    在 /index.php 中,您会看到它如何首先检查 /defines.php 是否存在。如果 _JDEFINES 未定义,它会继续加载 /includes/defines.php。所以一定要包括

    define('_JDEFINES', 'TRUE');
    

    在您覆盖的 /defines.php 文件中。祝你好运:)

    下面是 index.php 如何加载文件夹定义:

    if (file_exists(__DIR__ . '/defines.php')){
      include_once __DIR__ . '/defines.php';
    }
    if (!defined('_JDEFINES')){
      define('JPATH_BASE', __DIR__);
      require_once JPATH_BASE . '/includes/defines.php';
    }
    

    我现在看到您能够以类似的方式覆盖 /administrator 中的文件夹位置,将 /administrator/includes/defines.php 复制到 /administrator 并在此处覆盖文件夹。

    【讨论】:

    • 抱歉回复晚了。但我想我迷路了。 site.com/folder/index.php 是我安装的根目录。我想访问 site.com 并显示该站点,而无需将所有文件从 /folder 移动到根目录。你能帮我把它哑口无言吗,我必须做什么?
    • 我认为最简单的方法是使用 .htaccess,如下所述:stackoverflow.com/questions/10364951/…。如果您已经在为您的网站使用 .htaccess 文件,这可能有点棘手,因为您需要修改它以适应所解释的模式...
    【解决方案3】:

    我之前为此使用了一个名为 Virtual Domains 的扩展程序。据他们说,它提供了

    Joomla 的多域功能,无需更改 Joomla 核心 文件。

    。我以前用过,效果很好

    【讨论】:

    • 谢谢。我会研究一下,但乍一看似乎是用大锤敲碎坚果。
    • 我同意你的看法。但我认为这可能的唯一其他方法是创建一个类似的附加组件来实现您需要的规范结果。
    【解决方案4】:

    我首先尝试了接受的答案。但是,该答案还会将现有文件和文件夹重定向到新的子目录。

    出于这个原因,我使用了:

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^(www.)?example.com$
    RewriteCond %{REQUEST_URI} !^/subdir/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /subdir/$1
    RewriteCond %{HTTP_HOST} ^(www.)?example.com$
    RewriteRule ^(/)?$ subdir/index.php [L]
    

    改为。

    我知道这不是最好的解决方案,因为它没有正确隐藏子目录。但是,它允许保持该站点上的现有代码正常工作。

    【讨论】:

      猜你喜欢
      • 2013-04-26
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多