正如您可能知道的那样,Wordpress在设置中有一个选项,允许在子目录中安装站点,同时将站点URL作为主域。这就像"网站网址"和" Wordpress网址"。我正在Joomla寻找类似的东西。我知道没有内置的选项,但我不想在可能的情况下移动所有文件。请向我解释,就像一个五岁的孩子一样,以防万一:)
答案 0 :(得分:6)
要将整个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]
修改现在在/ subdir-folder中的默认joomla .htaccess文件,以包含RewriteBase:
RewriteBase /subdir/
经过这些修改后,似乎一切都按照应有的方式运作。
答案 1 :(得分:1)
您可以在joomla安装中覆盖文件/includes/defines.php。将此文件复制到安装的根文件夹,然后将所有文件夹名称更改为您的设置方式。
在/index.php中,您会看到它首先检查/defines.php是否存在。然后,如果未定义_JDEFINES,则继续加载/includes/defines.php。所以一定要包括
define('_JDEFINES', 'TRUE');
在重写的/defines.php-file中。祝你好运:)
下面是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并在此处覆盖文件夹。
答案 2 :(得分:0)
答案 3 :(得分: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]
代替。
我知道这不是最好的解决方案,因为它没有正确隐藏子目录。但是,它允许保持该站点上的现有代码正常工作。