모든 도메인에 대해 문서 루트 외부에 CMS 설치 가능
WordPress나 Drupal 등의 CMS 설치를 하나의 메인 CMS 설치의 복제품으로 여러 웹 사이트에서 실행하도록 설정하려면 어떻게 해야 합니까?동일한 서버에서 호스트되는 서로 다른 서버 계정에 의해 소유 및 관리됩니다.
설정은 다음과 같습니다.
- 소프트웨어: " " " "
nginx
apache2
(VestaCP) - 루트: ★★★★★★★★★★★★★★★★ ★
/home/user/example.com/public_html/
「1개의 CMS 인스톨의 복제」라고 하는 것은, 무엇을 의미합니까.
그림에서 설명한 바와 같이 DocumentRoot가 가리키는 폴더를 소유한 모든 사용자는 CMS 설치의 인스턴스를 복제/작성/사용할 수 있습니다.
CMS 설치를 실행하려면 다음 파일이 필요할 수 있습니다.
- DocumentRoot/configuration.php - CMS가 로드할 데이터를 지정합니다.
- DocumentRoot/index.php - 지정된 출력을 호출하여 렌더링합니다.
워드프레스
어떤 접근방식이 최선인지 분류하기 위해 다음 두 가지 시나리오를 생각해 낼 수 있습니다.
- 하나의 심볼릭 링크 폴더만 있는 경우 이 폴더에는 워드프레스 코어 파일이 포함됩니다.
- 모든 워드프레스 코어 파일과 폴더는 심볼적으로 연결되어 있습니다.
시나리오에서도 파일(「」)을 요구하려고 하고 있습니다.my-config.php
상징적으로 연결되어 있는 것이 아닙니다.
1: 심볼릭 링크 워드프레스 폴더:
word press/wp-config 를 지정합니다.php
<?php
require_once( ROOT_PATH . 'my-config.php');
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');
워드프레스/테스트.php
<?php echo 'Path is '.getcwd(); ?>
DocumentRoot/index.php
<?php
define('ROOT_PATH', dirname(__FILE__) . '/');
require('wordpress/index.php');
DocumentRoot/my-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 - 출력: 경로는 /path/to/wordpress입니다.
2: 또 다른 접근방식은 다음과 같습니다.
word press/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');
워드프레스/테스트.php
<?php echo 'Path is '.getcwd(); ?>
DocumentRoot/my-config.php
시나리오 1에서 사용되는 DocumentRoot 구성 파일과 동일합니다.
심볼릭 링크는 다음과 같습니다.
ln -s /path/to/wordpress/* .
나의 결과
- [방문 URL] - [테스트 결과]
- ../ - "../wp-admin/install.php + WSOD"로 수정합니다.
- ../wp-admin/ - WSOD
- ../test.http - 출력: 경로는 /home/user/example.com/public_html 입니다.
결론 Word Press
두 시나리오 모두 기본 인덱스 파일이 설치 파일로 리디렉션됩니다.이 문제는 일반적으로 데이터베이스에 연결되었지만 데이터베이스가 비어 있을 때 발생하므로 설치 지침에 따라 첫 번째 데이터를 삽입합니다.그런데 왜 WSOD가 되는 거죠?
파일 「 」 )test.php
, , , , , , , , , , , , , , , , 。시나리오 1에서는 워드프레스 디렉토리에 대한 경로가 워드프레스 코어 파일의 절대 경로가 됩니다.DocumentRoot 2는 DocumentRoot를 할 수 안안??
디렉토리의 시나리오 1. wordpress 1에서 알 수 wordpress 1에서 알 수 .를 들면, 「 」입니다.wp-admin
, call ", " ", "getcwd()
해야 합니다./path/to/wordpress/wp-admin
그렇지? 그렇다면 디렉터리 내의 파일에 대한 모든 호출은 파일을 찾을 수 없습니다. '''가/home/user/example.com/public_html/wp-admin/file.php
존재하지 않습니다! 않기 에 it징 access access access를 통해서만 할 수/path/to/wordpress/wp-admin/file.php
.
이 작업은 매우 간단합니다. 물론 중요한 것은 인덱스 파일입니다.MVC 프레임워크는 그 카테고리에 아주 느슨하게 단어 프레스를 넣었습니다.모두 하나의 진입점이 있습니다.대부분의 시작점은 인덱스 파일입니다.
즉, 요청된 파일은 인덱스 파일뿐이며, 실제로 호출되는 유일한 코드입니다.인덱스 파일은 이 방법을 알고 있는 코드에 하드 링크되어 있기 때문에 실행되는 나머지 파일은 라우팅됩니다.
따라서 인덱스 파일을 이동할 때 지적된 코드로 되돌리기만 하면 됩니다.웹 서버는 인덱스만 라우팅하지 않기 때문에 파일이 어디에 있는지는 중요하지 않습니다.PHP는 사용 중인 시스템 사용자가 파일에 액세스할 수 있는 한 파일에 액세스할 수 있습니다.
예를 들어 다른 데이터베이스를 사용하는 경우 각 설정 파일을 개별적으로 보유하는 것이 더 어려울 수 있습니다.대부분의 CMS 또는 MVC 프레임워크에서는 구성 파일이 어디에 있는지 알 수 없습니다.그냥 임의의 위치에 있을 뿐입니다.워드프레스에서는 사이트 URL과 워드프레스 URL이 일반 설정 내에 있다는 문제가 발생합니다.안타깝게도 데이터베이스에 있기 때문에 변경하기가 더 어렵습니다.또, 각 사이트에서 같은 메뉴를 사용하고 싶은 것은 아닐지도 모릅니다.
파일 "wordpress"에.Load it when WordPress wants it to load:
샘플 컨피규레이션파일은 올바른 방향으로 가고 있다고 생각합니다만, 사이트 URL과 wordpress url 때문에 별도의 데이터베이스를 사용해야 합니다.
워드프레스는 핵심으로 업그레이드할 때 올바른 데이터베이스를 업데이트할 필요가 없기 때문에 이러한 사실은 실제로 유지보수가 쉽지 않습니다.
사이트 URL은 실제 도메인이어야 합니다.wordpress url은 관리 스크립트의 원본입니다.그래서 그 부분은 정리해야 할 부분이 있습니다, wp-admin.
Wordpress 관리 영역의 일반 탭에서 이러한 설정을 변경하십시오.
갱신하다
제가 제안하고 싶은 것은 초기 설정 파일에서 매우 단순한 라우터를 만드는 것입니다.그것은 화려할 필요가 없습니다. 하다를 사용해서 할 때마다 알 수요.$_SERVER[HTTP_HOST]
어떤 도메인이 요청을 수행하는지 확인합니다. 할 수요. ( CODE
switch( $_SERVER['HTTP_HOST' ){
case 'domain1':
require 'location of domain1 config';
break;
case 'domain2':
require 'location of domain2 config';
break;
default:
require 'master site config';
}
그런 다음 각 사이트의 각 폴더 안에 site_url, 데이터베이스 및 일반 wp-config에 있는 설정 파일을 저장합니다.Excreta, 그럼 사이트의 각 인스턴스에 대한 관리 영역에 대한 액세스 권한을 부여하려면 문제가 해결되어야 합니다.
이것은 (wp-load.php 가 아닌 원래 설정만 변경했을 뿐) 나중에 각 설정 파일을 찾는 것은 비교적 간단하며 워드프레스 코어 코드에 최대한 영향을 주지 않기 때문에 유지보수가 용이할 수 있습니다.물론 wp-load가 달라지겠지만, 각 사이트에 맞는 커스텀을 찾는 것은 자연스러운 일인가요?
관리 영역에 대한 나의 관심사는 당신이 그것을 wp-admin을 통해 실행해야 한다는 것입니다.php, 인덱스 페이지가 아닙니다.WordPress의 아키텍처는 그다지 익숙하지 않습니다.관리영역의 로드와 관련된 것은 확실합니다만, 거기서 몇 가지 조정이 필요할지도 모릅니다.
이게 당신이 찾고 있던 건가요?http://jason.pureconcepts.net/2012/08/wordpress-multitenancy/
드디어!
WP 멀티사이트를 사용하거나 코어 파일을 크게 변경하지 않고 WordPress 코어 파일 세트를 사용하여 여러 웹 사이트를 실행할 수 있는 방법을 찾았습니다.
이 예는 다음 구조에 기초하고 있습니다.
var/
|
├── core/ # chown -R www-data:www-data .
| | # find . -type d -exec chmod 755 {} \;
| | # find . -type f -exec chmod 644 {} \;
| ├── wp-admin/
| ├── wp-content/
| | ├── themes/
| | ├── plugins/
| | └── languages/
| ├── wp-includes/
| └── wp-config.php
| └── # all other wordpress core files...
|
├── sites/ # chown -R www-data:www-data .
| | # find . -type d -exec chmod 775 {} \;
| | # find . -type f -exec chmod 664 {} \;
| ├── alpha/
| | ├── wp-admin -> /var/core/wp-admin/
| | | # ln -s /var/core/wp-admin /var/sites/alpha/
| | ├── wp-includes -> /var/core/wp-includes/
| | | # ln -s /var/core/wp-includes /var/sites/alpha/
| | ├── wp-content/
| | | └── . # files only available for alpha
| | ├── wp-login.php -> /var/core/wp-login.php
| | | # ln -s /var/core/wp-admin /var/sites/alpha/
| | └── index.php
| └── beta/
| | ├── wp-admin -> /var/core/wp-admin/
| | | # ln -s /var/core/wp-admin /var/sites/beta/
| | ├── wp-includes -> /var/core/wp-includes/
| | | # ln -s /var/core/wp-includes /var/sites/beta/
| | ├── wp-content/
| | | └── . # files only available for beta
| | ├── wp-login.php -> /var/core/wp-login.php
| | | # ln -s /var/core/wp-admin /var/sites/beta/
| | └── index.php
| └── . # etc...
.
앳/var/core/wp-config.php
다음과 같이 변경합니다.
<?php
if (defined('MULTIPRESS_ABSPATH')) {
require_once(MULTIPRESS_ABSPATH . 'wp-config.php');
} else {
$instance_path = $_SERVER['SCRIPT_FILENAME'];
if (strpos($instance_path, 'wp-admin') > -1) {
$instance_path = dirname(dirname($instance_path)) . '/';
} else {
$instance_path = dirname($instance_path) . '/';
}
require_once($instance_path . 'wp-config.php');
}
다른 모든 코어 파일을 원하는 대로 남겨두십시오. 이 코어 디렉토리의 wp-content에 플러그인 또는 테마를 추가하여 모든 사이트/인스턴스에서 글로벌하게 사용할 수 있도록 할 수도 있습니다.
이제 WP MultiPress 코어의 인스턴스를 설정할 수 있습니다.아래쪽에 있는 것이 표시됩니다./var/sites/alpha/wp-config.php
알파 사이트입니다.일반적으로 Unique Keys and Salts와 MySQL 설정만 정의하면 됩니다.그 다음에, wp-content 디렉토리의 커스텀명을 설정할 수도 있습니다.
<?php
/* -------------------------------------------- *
** MySQL settings. **
* -------------------------------------------- */
define('DB_NAME', 'wp_multipress');
define('DB_USER', 'manager');
define('DB_PASSWORD', 'mylittlepony');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
$table_prefix = 'alpha_';
/* -------------------------------------------- *
** Authentication Unique Keys and Salts. **
* -------------------------------------------- */
// Generate a set of keys:
// https://api.wordpress.org/secret-key/1.1/salt/
/* -------------------------------------------- *
** Dynamically determine the WP root URL. **
* -------------------------------------------- */
$path = trim(substr((strpos(dirname(__FILE__),'wp-admin')===false)?dirname(__FILE__):strstr(dirname(__FILE__),'/wp-admin'), strlen(rtrim($_SERVER['DOCUMENT_ROOT'],'/'))), '/');
$domain = !empty($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:$_SERVER['SERVER_NAME']; $force_domain = $domain;
$http = 'http'.(isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!='off'?'s':'').'://'; $force_http = $http;
// Uncomment the line below to force to https
//$force_http = strpos($http,'https')===false?'https://':$http;
// Uncomment the line below to force to www.
//$force_domain = strpos($domain,'www.')===false?'www.'.$domain:$domain;
// Or uncomment the line below to prevent access to www.
//$force_domain = strpos($domain,'www.')!==false?substr($domain,strpos($domain,'www.')):$domain;
$url = $force_http.$force_domain.(!empty($path)?'/'.$path:'');
if ($force_http!==$http||$force_domain!==$domain){ header('Location: '.$url.$_SERVER['REQUEST_URI']);exit(); }
/* -------------------------------------------- *
** General settings. **
* -------------------------------------------- */
define('WP_HOME', $url);
define('WP_SITEURL', $url);
define('WP_TEMP_DIR', sys_get_temp_dir());
/* -------------------------------------------- *
** File System settings. **
* -------------------------------------------- */
define('FS_METHOD', 'direct');
define('WP_CONTENT_DIR', dirname(__FILE__).'/wp-content');
/* -------------------------------------------- *
** Debug settings. **
* -------------------------------------------- */
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', false);
define('WP_DEBUG_DISPLAY', false);
define('SCRIPT_DEBUG', false);
define('SAVEQUERIES', false);
/* -------------------------------------------- *
** Cache settings. **
* -------------------------------------------- */
define('COMPRESS_CSS', true);
define('COMPRESS_SCRIPTS', true);
define('CONCATENATE_SCRIPTS', true);
define('ENFORCE_GZIP', true);
/* -------------------------------------------- *
** WordPress Localized Language. **
* -------------------------------------------- */
define('WPLANG', '');
/* -------------------------------------------- *
** That's all, stop editing! Happy blogging. **
* -------------------------------------------- */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');
다음으로 인스턴스의 인덱스를 나타냅니다.다음은 의 내용을 참조해 주세요./var/sites/alpha/index.php
아래.
<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Let MultiPress render this website.
*
* @var string
*/
define('MULTIPRESS_ABSPATH', dirname( __FILE__ ) . '/');
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template from MultiPress */
require( '/var/core/wp-blog-header.php' );
의 모든 파일을 확인합니다./var/core/
는 사이트를 실행하는 모든 프로세스에 대해 읽을 수 있습니다.또한 심볼 링크(와 함께 표시)를 작성하는 것도 잊지 마십시오.->
를 참조해 주세요).
그걸로 충분할 거야!
언급URL : https://stackoverflow.com/questions/31042543/cms-installation-outside-document-root-available-for-all-domains
'programing' 카테고리의 다른 글
JSON 모듈을 사용하여 예쁘게 인쇄할 때 사용자 지정 들여쓰기를 구현하는 방법은 무엇입니까? (0) | 2023.03.17 |
---|---|
jQuery AJAX 오류 처리(HTTP 상태 코드) (0) | 2023.03.17 |
WooCommerce 훅은 "결제 완료 후" 액션에 사용됩니다. (0) | 2023.03.17 |
React Native 앱을 브라우저에서 테스트할 수 있습니까? (0) | 2023.03.12 |
'유형 오류 [ERR_]Invalid_ARG_TYPE]:"path" 인수는 문자열 형식이어야 합니다.수신된 유형이 정의되지 않았습니다.' (0) | 2023.03.12 |