【发布时间】:2016-04-25 23:41:24
【问题描述】:
您可能知道,Wordpress 在设置中有一个选项,允许在子目录中安装站点,同时将站点 URL 作为主域。它类似于“站点 url”和“Wordpress url”。我正在 Joomla 中寻找类似的东西。我知道它没有内置选项,但如果可能的话,我宁愿不必移动所有文件。并且请向我解释一下,就像给一个五岁的孩子一样,以防万一:)
【问题讨论】:
标签: joomla subdirectory
您可能知道,Wordpress 在设置中有一个选项,允许在子目录中安装站点,同时将站点 URL 作为主域。它类似于“站点 url”和“Wordpress url”。我正在 Joomla 中寻找类似的东西。我知道它没有内置选项,但如果可能的话,我宁愿不必移动所有文件。并且请向我解释一下,就像给一个五岁的孩子一样,以防万一:)
【问题讨论】:
标签: joomla subdirectory
要将整个 joomla 安装移动到服务器上的子文件夹 (http://example.com/subdir),但仍从根目录 (http://example.com) 访问它,我执行了以下操作:
(代码由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/
经过这些修改后,似乎一切都按照应有的方式运行。
【讨论】:
您可以在您的 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 并在此处覆盖文件夹。
【讨论】:
【讨论】:
我首先尝试了接受的答案。但是,该答案还会将现有文件和文件夹重定向到新的子目录。
出于这个原因,我使用了:
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]
改为。
我知道这不是最好的解决方案,因为它没有正确隐藏子目录。但是,它允许保持该站点上的现有代码正常工作。
【讨论】: