Как вы знаете, у Wordpress есть параметры в настройках, позволяющие устанавливать сайт в подкаталоге, а URL-адрес сайта - основной. Это было что-то вроде «URL-адрес сайта» и «URL-адрес Wordpress». Я ищу что-то подобное в Joomla. Я знаю, что для него нет встроенного варианта, но я бы предпочел не переместить все файлы, если это возможно. И, пожалуйста, объясните это мне, как пятилетнему, на всякий случай :)Установить Joomla в подкаталог
ответ
Чтобы переместить всю установку JOOMLA в подпапку на сервере (http://example.com/subdir), но все-таки получить доступ к нему из корня (http://example.com) я сделал следующее:
- Переместить всю установку в подкаталоге-папке
- В config.php, установите $ live_site = "http://example.com";
- изменить Также ТМП и лог-папки в configuration.php
- Добавить .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-файл, теперь в/подкаталоге-папки, чтобы включить RewriteBase:
RewriteBase /subdir/
После этих изменений кажется, что все работает так, как должно.
Я использовал расширение под названием Virtual Domains для этого раньше. В соответствии с ними он предоставляет
Многодоменная возможность для Joomla без изменения ядра Joomla .
. Что я использовал ранее и хорошо работает
Спасибо. Я посмотрю на это, но на первый взгляд кажется, что кувалдой взломать орех. –
Я согласен с вами. Но единственный способ, которым я вижу это, - создать аналогичное дополнение для достижения результатов, которые вам нужны для ваших спецификаций. – Sphinx
Вы можете переопределить файл /includes/defines.php в своей установке joomla. Скопируйте этот файл в корневую папку вашей установки, а затем измените имена всех папок так, как вам нравится ваша установка.
В /index.php вы видите, как он сначала проверяет, существует ли /defines.php. Затем он продолжает загружать /includes/defines.php, если _JDEFINES не определен. Поэтому обязательно включите
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';
}
теперь я вижу, что вы можете переопределить местоположение папки в/администратора в подобном деле, копировать/администратор/включает/define.php to/administrator и переопределять папки здесь.
Извините за поздний ответ. Но я думаю, что я потерян. site.com/folder/index.php - это корень моей установки. Я хочу получить доступ к сайту site.com и показать сайт без необходимости переместить все файлы из/в папку root. Не могли бы вы опустить это для меня, что я должен сделать? –
Я думаю, что самый простой способ достичь этого - использовать .htaccess, как описано здесь: http://stackoverflow.com/questions/10364951/make-web-root-folder-a-sub-folder-with-htaccess. Если вы уже используете файл .htaccess для своего сайта, это может быть немного сложно, так как вам нужно будет изменить его, чтобы соответствовать шаблону, объясненному ... – jonasfh
Я сначала попробовал принятый ответ. Однако этот ответ также перенаправляет существующие файлы и папки в новый поддиректор.
По этой причине я использовал:
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]
вместо этого.
Я знаю, что это не лучшее решение, так как оно не скрывает соответствующий каталог. Тем не менее, это позволяет сохранить существующий код на этом сайте.
Спасибо! Это сделал трюк. –
Совет. Мне пришлось добавить эти коды: https://stackoverflow.com/a/7781331/5681573 , чтобы ваши перезаписывающие элементы также работали на странице администратора Joomla без конечной косой черты в конце. – Cinzel