Как настроить установку CMS, такую как WordPress или Drupal, для запуска на нескольких веб-сайтах в качестве репликации одной основной установки CMS. Владеет и управляется разными учетными записями серверов, размещенными на одном сервере.
Моя настройка аналогична следующей:
- Программное обеспечение Webserver:
nginx
работает вместе сapache2
(VestaCP) - Корень документа:
/home/user/example.com/public_html/
Что я имею в виду, "репликация одной установки CMS":
Как описано на диаграмме, все пользователи, владеющие папкой, на которой указывается DocumentRoot, смогут реплицировать/создать экземпляр/использовать установку CMS.
Для запуска установки CMS вам, вероятно, понадобятся следующие файлы:
- DocumentRoot/configuration.php - укажите, какие данные должна загружать CMS.
- DocumentRoot/index.php - Вызвать и отобразить указанный вывод.
WordPress
Чтобы разобраться, какой подход будет работать, я мог бы придумать эти два разных сценария:
- где есть только одна символьная связанная папка, в эту папку входят файлы wordpress core.
- все основные файлы и папки wordpress символически связаны.
В обоих сценариях установка пытается создать собственный файл конфигурации (my-config.php
), а не тот, который символически связан.
1: Символическая связанная папка Wordpress:
WordPress/WP-config.php
<?php
require_once( ROOT_PATH . 'my-config.php');
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');
WordPress/test.php
<?php echo 'Path is '.getcwd(); ?>
DocumentRoot/index.php
<?php
define('ROOT_PATH', dirname(__FILE__) . '/');
require('wordpress/index.php');
DocumentRoot/мой-config.php
Содержит все, кроме кода внутри wordpress/wp-config.php
<?php
define('WP_HOME', ... );
define( 'WP_CONTENT_URL', ... );
etc..
Символьная ссылка следующая:
ln -s /path/to/wordpress/ .
Мои результаты
- [Посещенные URL] - [Результаты тестирования]
- ../- Перенаправление на:../wp-admin/install.php + 404
- ../wp-admin/- 404
- ../wordpress/- WSOD
- ../wordpress/wp-admin/- WSOD
- ../wordpress/test.php - Выход: Путь/путь/в/wordpress
2: Другой подход может быть примерно таким:
WordPress/WP-config.php
<?php
require_once('my-config.php'); // So DocumentRoot/my-config.php
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');
WordPress/test.php
<?php echo 'Path is '.getcwd(); ?>
DocumentRoot/мой-config.php
То же, что и файл конфигурации DocumentRoot, используемый в сценарии 1.
Символьные ссылки следующие:
ln -s /path/to/wordpress/* .
Мои результаты
- [Посещенные URL] - [Результаты тестирования]
- ../- Перенаправление на:../wp-admin/install.php + WSOD
- ../wp-admin/- WSOD
- ../test.php - Результат: Путь /home/user/example.com/public_html
Заключение WordPress
В обоих сценариях основной файл индекса перенаправляется к установочному файлу. Обычно это происходит, когда соединение с базой данных было сделано, но база данных по-прежнему пуста, поэтому, следуя инструкциям по установке, вы вставляете свои первые данные. Но тогда почему он дает WSOD?
Тестовый файл (test.php
) немного разряжается. В сценарии 1 путь к файлу wordpress становится абсолютным путем для файлов ядра wordpress. Для сценария 2 путь DocumentRoot становится абсолютным путем для файлов ядра wordpress... или нет?
Хотя не для вспомогательных каталогов в каталоге wordpress, как мы можем узнать из сценария 1. Например, каталог wp-admin
, файлы, на которые вызов getcwd()
должен выводить /path/to/wordpress/wp-admin
правильно? Если это так, значит, все вызовы файлов в этих каталогах никогда не найдут файл. Поскольку файл /home/user/example.com/public_html/wp-admin/file.php
не существует! Он не символически связан и поэтому доступен только через /path/to/wordpress/wp-admin/file.php
.