Para aquellos que deban montar un WordPress con multisitio voy a dejar un rápido tutorial para activar y configurarlo en los 2 servidores web más famosos: Apache y Nginx. Mi intención no es profundizar en las particularidades o sus posibilidades, sino hacerlo funcionar correctamente. Conozco de primera mano el dolor de cabeza que supone construirlo en un VPS (o servidor dedicado) o un hosting de pago poco amable.
En caso de indicar que diferencie los sitios por medio de los subdominios, no será necesario modificar nada.
Activar multisitio en WordPress
En wp-config.php
añadimos.
define( 'WP_ALLOW_MULTISITE', true );
Después, si acudes a Herramientas > Configuración de la red
te pedirá que también añadas lo siguiente.
define('WP_ALLOW_MULTISITE', true);
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'dominio.com);
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
Recuerda cambiar dominio.com
por el tuyo.
Configuración Apache
En .htaccess
, que lo encontrarás en la raíz de WordPress, debes modificarlo con el siguiente contenido.
# BEGIN WordPress
<IfModule mod_rewrite.c>
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]
</IfModule>
# END WordPress
Configuración Nginx
En el archivo donde configuras el sitio, situado posiblemente en /etc/nginx/site-enabled/dominio.com
, le indicaremos que funcione con el sistema de permalinks (enlaces permanentes) de WordPress.
location / {
try_files $uri uri//index.php?q=uri&$ar
}
A continuación que vamos a utilizar un sistema de carpetas, o subdirectorios, para el multisitio.
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
rewrite ^(?!^/my-db-admin)(/[^/]+)?(/wp-.*) $2 last;
rewrite ^(?!^/my-db-admin)(/[^/]+)?(/.*\.php) $2 last;
}
Quedando todo unido de la siguiente manera. No olvides modificar root
y server_name
.
server {
listen 80;
index index.php;
server_name dominio.com;
root /localizacion/carpeta/wordpress;
location / {
try_files $uri uri//index.php?q=uri&$ar
}
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
rewrite ^(?!^/my-db-admin)(/[^/]+)?(/wp-.*) $2 last;
rewrite ^(?!^/my-db-admin)(/[^/]+)?(/.*\.php) $2 last;
}
}
{{ comments.length }} comentarios