programing

모든 도메인에 대해 문서 루트 외부에 CMS 설치 가능

goodsources 2023. 3. 17. 21:26
반응형

모든 도메인에 대해 문서 루트 외부에 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 - 지정된 출력을 호출하여 렌더링합니다.

단일 CMS 설치


워드프레스

어떤 접근방식이 최선인지 분류하기 위해 다음 두 가지 시나리오를 생각해 낼 수 있습니다.

  1. 하나의 심볼릭 링크 폴더만 있는 경우 이 폴더에는 워드프레스 코어 파일이 포함됩니다.
  2. 모든 워드프레스 코어 파일과 폴더는 심볼적으로 연결되어 있습니다.

시나리오에서도 파일(「」)을 요구하려고 하고 있습니다.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

반응형