Déplacer un WP Multisite vers un sous-répertoire

20

Tout d'abord, j'ai lu un certain nombre de messages sur ce processus. Cependant, pour diverses raisons, le processus reste difficile à mettre en œuvre ou à dépanner faute d'exemples même abstraits, ou peut-être trop abstraits. Et il y a quelques messages "ne peut pas faire", presque toujours suivis de "avec 3.5, vous pouvez maintenant" des mises en garde, donc si on peut rester ambigu, bien que sans doute non trivial.

Sommaire:

Comment déplacer un wordpress multisite (WPMS) de root.com vers root / blogs?

Pour cet exemple, nous déplaçons un WPMS de "root.com" vers "root.com/blogs"

Je comprends que je dois mettre à jour les chemins d'accès dans la base de données et wp-config.php de manière appropriée. Il semble que je doive également mettre à jour .htaccess? Je suis également au courant du problème de sérialisation avec les mises à jour de recherche / remplacement et de requête mysql.

J'ai un WPMS que j'ai mis à jour en 3.5. J'ai trouvé les tableaux suivants avec les informations de domaine et de chemin

Configuration de travail existante avant de passer au sous-répertoire

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. Le blog_id correspond aux tables d'options wp _ # _ qui contiennent:

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. Dans mon wp-config.php, j'ai les lignes spécifiques à WPMS suivantes:

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. Enfin, dans mon .htaccess , j'ai:

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]

Mises à jour nécessaires pour déplacer le site

Il me semble que pour déplacer mon site vers les / blogs, je voudrais:

1. Mettez à jour wp_blogs vers

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. Mettez à jour wp_site vers

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

3. Options wp _ # _

+-------------+--------------------------------+
| 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 );

note: je ne sais pas comment cette étape est correctement mise à jour

5. .htaccess

J'ai trouvé de vagues instructions de "mise à jour .htaccess appropriée", mais pas de détails. Mettre à jour RewriteBase? Quelles lignes .htaccess mettre à jour lorsque je déplace root.com vers root.com/blogs?

Les chemins trouvés dans les publications manqueront au processus ci-dessus. Mes druthers doivent utiliser l'outil de recherche et de remplacement pour cela, après avoir effectué ces mises à jour plus fondamentales; ou ai-je tort?

Update bungeshea suggère que, oui, je pointe RewriteBase vers le sous-répertoire "blogs", c'est-à-dire,

RewriteBase /Blogs

Enfin, si vous ne connaissez pas http://interconnectit.com/products/search-and-replace-for-wordpress-databases/, vous devriez. C'est excellent.

Screenack
la source
3
Grande question, excellent processus +1
kaiser
1
Est ce juste moi? Je pense que les requêtes dans le processus ne sont pas correctes update wp_blogs set domain=concat(domain, '/blogs'), path=concat(path, 'blogs/'); devraient plutôt êtreupdate wp_blogs set path=concat('/blogs',path);
MR

Réponses:

7

Je sais que c'est vieux mais je l'ai réparé! j'ai installé WP MU dans un sous-dossier. 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);

et dans votre base de données, modifiez ceci:

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)
nicmare
la source
c'était incroyablement utile. J'ai eu une installation de sous-domaine et un vidage de la base de données et un zip du site. J'avais besoin de le restaurer sur un nouveau serveur et j'ai dû mettre à jour manuellement le site. Les mises à jour de la base de données étaient les plus impératives que je devais faire. Je vous remercie!
Jacob Raccuia
2

Il me semble que si vous avez résolu votre problème - il suffit de suivre vos étapes 1-4, et pour l' étape 5 mise à jour le RewriteBasedans .htaccess. Pour mettre à jour les chemins d'accès dans les publications, j'aime utiliser l' outil de recherche et de remplacement stérilisé Interconnect IT .

karité
la source
Merci, bungshea. Comme je l'indique dans mon article, mettez à jour RewriteBase vers quoi, exactement, selon l'exemple ci-dessus? Serait-ce: RewriteBase / blog?
Screenack
Oui:RewriteBase /blog
shea
Bungshea; fait, mais ne fonctionne toujours pas. Toujours "Erreur lors de l'établissement de la connexion à la base de données" après tout ce qui précède. Pire encore, il n'y a aucune erreur dans mon journal d'erreurs Apache.
Screenack
@Screenack quelles sont les spécificités de "Erreur lors de l'établissement de la connexion à la base de données"? Astuce: visitewp-admin
karité
1

Ok, voici ce que j'ai fait et cela a fonctionné. Pas de sous-dossier. Le site était précédemment configuré pour un sous-domaine.

SAUVEGARDE D'ABORD !!!

wp-config.php (remplacez ce bloc par le bloc de votre fichier)

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]

maintenant dans la base de données SQL:

1) pour chaque wp_ (site #) _ tablesuffix allez dans le tableau des options et changez siteurl et home en http://www.sitename.com/blogname

2) wp_blogs pour chaque changement blog_id le domaine à partir blogname.domain.comde domain.comet le chemin de/blogname/

3) pas besoin de changer wp_options siteurl & home ou toute cellule dans wp_site ou wp_sitemeta si l'installation est au même endroit.

Une fois que vous avez terminé, assurez-vous d'aller dans (dans le panneau d'administration du superutilisateur) paramètres> permaliens et cliquez sur enregistrer.

Voila!

hot_barbara
la source
0

Ceci est ma première réponse, alors soyez prévenant! :)

Je n'avais PAS de blog qui était déjà dans des sous-domaines à convertir. Mais j'ai dû me battre parce que c'était un vieux blog et ils ne me laissaient pas créer un blog de sous-répertoire et je craignais que WP n'apporte des modifications à ma base de données au moment où ils me donnaient les codes à insérer.

C'est ce qui a fonctionné pour moi en avril 2018 ... J'ai utilisé le wp-config de hot_barbara et j'ai également utilisé le .htaccess.

Par conséquent, n'allez pas pour un sous-dossier - je ne l'ai pas fait!

CEPENDANT, dans SQL DB, c'est ce qui s'est passé dans mon cas - tout était déjà ainsi, je n'ai donc apporté aucune modification:

  1. domaine wp_site: chemin xyzabc.com: /

domaine wp_blogs: chemin xyzabc.com: /

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

Si je comprends bien, vous utiliseriez une barre oblique si vous l'aviez dans vos paramètres.

Ebe
la source
0

Réécrivez votre wp-config.phpavec ce code

define('SUBDOMAIN_INSTALL', false);

au lieu de define('SUBDOMAIN_INSTALL', true);

ensuite aller à:

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

ensuite:

Ajoutez ce qui suit à votre fichier .htaccess dans /var/www/vhosts/website.com/, en remplaçant les autres règles 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]

C'est ça.

Créer un nouveau site avec un sous-répertoire

Amran
la source