WP 멀티 사이트를 서브 디렉토리로 이동


20

먼저이 프로세스에 대한 여러 게시물을 읽었습니다 . 그러나 여러 가지 이유로 인해 추상적 인 예제가 없거나 너무 추상적 인 프로세스로 인해 프로세스를 구현하거나 문제를 해결하기가 어렵습니다. 그리고 "언제나 할 수없는"게시물이 거의 있으며, "항상 3.5로, 지금 할 수 있습니다"라는 경고가 뒤 따릅니다.

개요:

root.com에서 root / blogs로 워드 프레스 멀티 사이트 (WPMS)를 옮기는 방법?

이 예에서는 WPMS를 "root.com"에서 "root.com/blogs"로 옮깁니다.

데이터베이스 및 wp-config.php의 경로를 적절하게 업데이트해야한다는 것을 알고 있습니다. .htaccess를 업데이트해야 할 수도 있습니까? 검색 / 바꾸기 및 mysql 쿼리 업데이트와 관련된 직렬화 문제도 알고 있습니다.

3.5로 업데이트 한 WPMS가 있습니다. 도메인 및 경로 정보가있는 다음 표를 찾았습니다.

서브 디렉토리로 이동하기 전에 기존 작업 구성

1. wp_blogs

select blog_id, domain, path from wp_blogs;
+---------+-------------+--------+
| blog_id | domain      | path   |
+---------+-------------+--------+
|       1 | root.com    | /      |
|       2 | root.com    | /matt/ |
+---------+-------------+--------+

2. wp_site

select * in wp_site;
+----+-------------+------+
| id | domain      | path |
+----+-------------+------+
|  1 | root.com    | /    |
+----+-------------+------+

3. blog_id는 다음을 포함하는 wp _ # _ options 테이블에 해당합니다.

select option_name,option_value from wp_2_options 
where option_name = 'home' or option_name = 'siteurl';
+-------------+--------------------------+
| option_name | option_value             |
+-------------+--------------------------+
| home        | http://root.com/matt/    |
| siteurl     | http://root.com/matt/    |
+-------------+--------------------------+

4. 내 wp-config.php 에는 다음과 같은 WPMS 관련 행이 있습니다.

define('WP_ALLOW_MULTISITE', true);
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false);
$base = '/';
define( 'DOMAIN_CURRENT_SITE', 'root.com' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

5. 마지막으로 .htaccess 에는 다음이 있습니다.

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

사이트를 이동하는 데 필요한 업데이트

내 사이트를 / blogs로 옮기려면 다음과 같이하십시오.

1. wp_blogs를 다음으로 업데이트하십시오.

mysql> update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/');
select blog_id, domain, path from wp_blogs where blog_id < 3;
+---------+-------------+--------------+
| blog_id | domain      | path         |
+---------+-------------+--------------+
|       1 | root.com    | /blogs/      |
|       2 | root.com    | /blogs/matt/ |
+---------+-------------+--------------+

2. wp_site를 다음과 같이 업데이트하십시오.

update wp_site set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/');
select * from  wp_site;
+----+-------------+------------+
| id | domain      | path       |
+----+-------------+------------+
|  1 | root.com    | /blogs/    |
+----+-------------+------------+

3. wp _ # _ options

+-------------+--------------------------------+
| option_name | option_value                   |
+-------------+--------------------------------+
| home        | http://root.com/blogs/matt/    |
| siteurl     | http://root.com/blogs/matt/    |
+-------------+--------------------------------+

4. wp_config.php

define('WP_ALLOW_MULTISITE', true);
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false);
$base = '/blogs/';
define( 'DOMAIN_CURRENT_SITE', 'root.com' );
define( 'PATH_CURRENT_SITE', '/blogs/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

참고 : 이 단계가 어떻게 적절하게 업데이트되는지 확실하지 않습니다.

.htaccess

모호한 "update.htaccess를 적절하게 업데이트"지침을 찾았지만 구체적인 내용은 알 수 없습니다. RewriteBase를 업데이트 하시겠습니까? root.com을 root.com/blogs로 옮길 때 .htaccess에서 어떤 행을 업데이트합니까?

위 프로세스에서 누락 된 부분은 게시물에서 찾은 경로입니다. 내 진실은이 기본적인 업데이트를 한 후에 검색 및 바꾸기 도구를 사용해야합니다. 아니면 내가 틀렸어?

업데이트 bungeshea 는 RewriteBase가 "blogs"하위 디렉토리를 가리 키 도록 제안합니다.

RewriteBase /Blogs

마지막으로, http://interconnectit.com/products/search-and-replace-for-wordpress-databases/ 에 대해 모른다 면해야합니다. 훌륭합니다.


3
좋은 질문, 좋은 프로세스 +1
kaiser

1
나 뿐인가요? 프로세스의 쿼리가 정확하지 않다고 생각 update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/'); 합니다.update wp_blogs set path=concat('/blogs',path);
MR

답변:


7

나는 그것이 오래되었다는 것을 알고 있지만 그것을 고쳤다! 하위 폴더에 WP MU를 설치했습니다. htaccess:

RewriteEngine On
RewriteBase /YOUR_SUBFOLDER
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule ^(.*\.php)$ YOUR_SUBFOLDER/$1 [L]
RewriteRule . index.php [L]

wp-config.php:

define( 'WP_ALLOW_MULTISITE', true ); 
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'localhost'); // or your host
define('PATH_CURRENT_SITE', '');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

데이터베이스에서 다음을 수정하십시오.

wp_site
domain: localhost (OR your domain but no subdirectory!)
path: /

wp_blogs
domain: localhost (OR your domain but no subdirectory in each blog_id!)
path: /

wp_sitemeta
siteurl: http://localhost/YOUR_SUBFOLDER (replace localhost with your host)

이것은 매우 도움이되었습니다. 하위 도메인 설치와 사이트의 데이터베이스 덤프 및 zip이 있습니다. 새 서버에서 복원해야했고 사이트를 수동으로 업데이트해야했습니다. 데이터베이스 업데이트는 내가해야 할 가장 필수적인 업데이트였습니다. 고맙습니다!
Jacob Raccuia

2

자신의 문제를 해결 한 것처럼 보입니다. 1-4 단계를 따르고 5 단계 RewriteBase에서를 업데이트하십시오 .htaccess. 게시물의 경로를 업데이트하기 위해 Interconnect IT 멸균 검색 및 바꾸기 도구를 사용하는 것이 좋습니다.


고마워요. 게시물에 표시된 것처럼 RewriteBase를 위의 예에 따라 정확히 무엇으로 업데이트합니까? RewriteBase / blog?
Screenack

예 :RewriteBase /blog
shea

분지; 완료되었지만 여전히 작동하지 않습니다. 위의 모든 후에도 여전히 "데이터베이스 연결 설정 오류"가 발생합니다. 게다가 아파치 오류 로그에 오류가 발생하지 않습니다.
Screenack

@Screenack "데이터베이스 연결 설정 오류"의 특징은 무엇입니까? 힌트 : 방문wp-admin
shea

1

좋아, 여기 내가 한 일이 있고 이것이 효과가 있었다. 하위 폴더가 없습니다. 사이트가 이전에 하위 도메인으로 구성되었습니다.

우선 백업!

wp-config.php (이 블록을 파일의 블록으로 대체)

define('WP_ALLOW_MULTISITE', true ); 
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'no-www-in-sitename.com'); // your host
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

.htaccess

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

이제 SQL DB에서 :

1) 각 wp_ (site #) _ tablesuffix마다 옵션 테이블로 이동하여 siteurl 및 home을 http://www.sitename.com/blogname

2) 각 blog_id 변화 도메인 wp_blogs blogname.domain.comdomain.com및 경로/blogname/

3) 설치가 동일한 위치에있는 경우 wp_options siteurl & home 또는 wp_site 또는 wp_sitemeta의 셀을 변경할 필요가 없습니다.

완료 한 후 (수퍼 유저 관리자 패널에서) 설정> 영구 링크로 이동하여 저장을 클릭하십시오.

짜잔!


0

이것은 나의 첫 번째 대답이므로 배려하십시오! :)

하위 도메인에 이미 전환되어있는 블로그가 없습니다. 그러나 나는 그것이 오래된 블로그 였기 때문에 싸워야했고 하위 디렉토리 블로그를 만들 수 없었고 WP는 그들이 넣을 코드를 줄 때까지 DB가 변경 될까 두려워했습니다.

이것은 2018 년 4 월에 나를 위해 일한 것입니다 ... hot_barbara의 wp-config를 사용했고 그들도 .htaccess를 사용했습니다.

따라서 하위 폴더를 사용하지 마십시오.

그러나 SQL DB에서 이것은 내 경우에 일어난 일입니다. 이미 모든 방식으로 이미 변경되었으므로 변경하지 않았습니다.

  1. wp_site 도메인 : xyzabc.com 경로 : /

wp_blogs 도메인 : xyzabc.com 경로 : /

wp_sitemeta siteurl : h ** ps : //xyzabc.com/

내가 이해하는 것처럼 설정에 슬래시가 있으면 슬래시를 사용합니다.


0

wp-config.php이 코드로 다시 작성

define('SUBDOMAIN_INSTALL', false);

대신에 define('SUBDOMAIN_INSTALL', true);

그런 다음 이동하십시오.

http://www.website.com/wp-admin/network/setup.php

그때:

/var/www/vhosts/website.com/의 .htaccess 파일에 다음을 추가하여 다른 WordPress 규칙을 바꾸십시오.

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

그게 다야.

서브 디렉토리를 사용하여 새 사이트 작성

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.