web-dev-qa-db-fra.com

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

Premièrement, j'ai luun certain nombre de messages sur ce processus. Cependant, pour diverses raisons, le processus reste difficile à mettre en œuvre ou à résoudre, faute d’exemples même abstraits, voire trop abstraits. Et il y a quelques messages "ne peut pas faire", suivis presque toujours par "avec 3,5, vous pouvez maintenant", des mises en garde, donc si on peut rester ambigu, bien que sans aucun doute non-trivial.

Résumé:

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 de la base de données et le fichier wp-config.php de manière appropriée. Il semble que je devrais peut-être aussi mettre à jour .htaccess? Je suis également conscient du problème de sérialisation lié aux mises à jour des requêtes search/replace et mysql.

J'ai un WPMS que j'ai mis à jour à 3.5. J'ai trouvé les tables suivantes 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 suivantes spécifiques à 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. 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 requises pour déplacer le site

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

1. Mettez à jour wp_blogs en

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 à

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

note: Je ne vois pas comment cette étape est mise à jour de manière appropriée

5. .htaccess

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

Le chemin ci-dessus manquera aux chemins trouvés dans les publications. Mes collaborateurs doivent utiliser l'outil de recherche et de remplacement pour cela, après avoir apporté ces mises à jour plus fondamentales. ou ai-je tort?

Updatebungeshea 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.

19
Screenack

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)
6
nicmare

Il me semble que vous avez résolu votre propre problème - suivez simplement les étapes 1 à 4 et, pour l’étape 5, mettez à jour RewriteBase dans .htaccess. Pour mettre à jour les chemins dans les publications, j'aime bien utiliser l'outil de recherche-remplacement stérilisé Interconnect IT .

2
shea

Ok voici ce que j'ai fait et cela a fonctionné. Aucun sous-dossier. Le site a été précédemment configuré pour le sous-domaine.

SAUVEZ D'ABORD !!!

wp-config.php (remplace 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, accédez au tableau des options et remplacez siteurl et home par http://www.sitename.com/blogname.

2) wp_blogs pour chaque blog_id fait passer le domaine de blogname.domain.com à domain.com et le chemin en /blogname/

3) nul besoin de changer wp_options siteurl & home ou d’autres cellules de wp_site ou wp_sitemeta si l’installation se trouve au même endroit.

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

Voila!

1
hot_barbara

Ceci est ma première réponse alors soyez s'il vous plaît! :)

Je DID PAS un blog qui était déjà dans des sous-domaines à convertir. Mais je devais me battre parce que c’était un vieux blog et ils ne me laisseraient pas faire un blog de sous-répertoires et j’avais peur que WP apporte des modifications à ma base de données au moment où ils me donnent les codes à mettre.

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

Par conséquent, s'il vous plaît ne pas aller pour un sous-dossier - je n'ai pas!

CEPENDANT, dans SQL DB, c’est ce qui s’est passé dans mon cas - c’était déjà déjà comme ça, donc je n’ai apporté aucune modification:

  1. wp_site domaine: xyzabc.com chemin: /

wp_blogs domaine: chemin xyzabc.com: /

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

Si j'ai bien compris, vous utiliseriez une barre oblique finale si vous l'aviez dans vos paramètres.

0
Ebe

Réécris ton wp-config.php avec ce code

define('SUBDOMAIN_INSTALL', false);

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

ensuite aller à:

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

puis:

Ajoutez les éléments suivants à votre fichier .htaccess dans /var/www/vhosts/website.com/, en remplacement des 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 tout.

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

0
Amran