在子目录中安装Joomla

3

有些人可能知道,WordPress在设置中有一个选项,允许在子目录中安装网站,同时将网站URL设置为主域名。它类似于“网站URL”和“WordPress URL”。我正在寻找类似于Joomla的东西。我知道它没有内置选项,但如果可能的话,我不想移动所有文件。请像对待五岁儿童一样向我解释。

4个回答

6

如果您想将整个 Joomla 安装移到服务器上的子文件夹(http://example.com/subdir),但仍然可以从根目录(http://example.com)访问它,请按照以下步骤进行:

  • 将整个安装移动到子文件夹中。
  • 在 configuration.php 中,设置 $live_site = "http://example.com";
  • 同时更改 configuration.php 中的 tmp 和 log 文件夹。
  • 在根文件夹中添加一个 .htaccess 文件:

(此代码修改自这个优秀的答案

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/

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

提示:我不得不添加这些代码:https://dev59.com/9Wsz5IYBdhLWcg3wmpH0#7781331 以便让您的RewriteRules也适用于Joomla管理员页面,而不是以斜杠结尾。 - Cinzel

1
你可以覆盖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移动到根目录就能看到网站。你能简单明了地告诉我该怎么做吗? - Kard Nails
我认为最简单的方法是使用.htaccess,如此处所述:https://dev59.com/LWkv5IYBdhLWcg3wwjkI。如果您已经在您的网站上使用.htaccess文件,这可能有点棘手,因为您需要修改它以适应所解释的模式... - jonasfh

0

我首先尝试了被接受的答案。然而,那个答案也会将现有的文件和文件夹重定向到新的子目录。

因此,我使用了:

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]

取而代之。

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


0
我以前使用过一个叫做虚拟域的扩展程序。据他们称,它可以为Joomla提供多域名功能,而不需要更改Joomla核心文件。
我之前已经使用过它,并且效果很好。

谢谢,我会仔细研究一下,但乍一看似乎有点大材小用了。 - Kard Nails
我同意你的观点。但我唯一能想到的其他方法是创建一个类似的添加程序,以按照你的要求实现所需的结果。 - Sphinx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接