{"id":1911,"date":"2016-10-20T10:50:50","date_gmt":"2016-10-20T10:50:50","guid":{"rendered":"http:\/\/esferas.org\/msqlu\/?p=1911"},"modified":"2016-10-21T17:07:45","modified_gmt":"2016-10-21T17:07:45","slug":"necesito-cambiar-la-raiz-de-wordpress","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2016\/10\/20\/necesito-cambiar-la-raiz-de-wordpress\/","title":{"rendered":"Necesito cambiar la ra\u00edz de WordPress &#8230;"},"content":{"rendered":"<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:838,&quot;href&quot;:&quot;https:\\\/\\\/codex.wordpress.org\\\/Changing_The_Site_URL&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;https:\\\/\\\/wordpress.org\\\/support\\\/article\\\/changing-the-site-url\\\/&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:839,&quot;href&quot;:&quot;https:\\\/\\\/httpd.apache.org\\\/docs\\\/2.4\\\/mod\\\/mod_authnz_ldap.htm&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:840,&quot;href&quot;:&quot;https:\\\/\\\/codex.wordpress.org\\\/Database_Description#Multisite_Table_Overview&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260309132708\\\/https:\\\/\\\/codex.wordpress.org\\\/Database_Description&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 15:58:38&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 15:58:38&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:841,&quot;href&quot;:&quot;https:\\\/\\\/codex.wordpress.org\\\/Database_Description#Table:_wp_options&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260309132708\\\/https:\\\/\\\/codex.wordpress.org\\\/Database_Description&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 15:58:45&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 15:58:45&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:842,&quot;href&quot;:&quot;https:\\\/\\\/codex.wordpress.org\\\/Option_Reference&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20240104230523\\\/https:\\\/\\\/codex.wordpress.org\\\/Option_Reference&quot;,&quot;redirect_href&quot;:&quot;https:\\\/\\\/developer.wordpress.org\\\/apis\\\/handbook\\\/options\\\/&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:843,&quot;href&quot;:&quot;https:\\\/\\\/httpd.apache.org\\\/docs\\\/2.4\\\/mod\\\/mod_authnz_ldap.html&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260405092927\\\/https:\\\/\\\/httpd.apache.org\\\/docs\\\/2.4\\\/mod\\\/mod_authnz_ldap.html&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 15:58:55&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 15:58:55&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:844,&quot;href&quot;:&quot;https:\\\/\\\/halfelf.org\\\/2010\\\/dig-yourself-out-of-a-hole-multisite-edition&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260415160016\\\/https:\\\/\\\/halfelf.org\\\/2010\\\/dig-yourself-out-of-a-hole-multisite-edition\\\/&quot;,&quot;redirect_href&quot;:&quot;https:\\\/\\\/halfelf.org\\\/2010\\\/dig-yourself-out-of-a-hole-multisite-edition\\\/&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:845,&quot;href&quot;:&quot;https:\\\/\\\/codex.wordpress.org\\\/Database_Description&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260309132708\\\/https:\\\/\\\/codex.wordpress.org\\\/Database_Description&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 15:59:07&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 15:59:07&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;}]'><\/div>\n<p>&#8230; en la instalaci\u00f3n <em>multisite<\/em> que <a href=\"http:\/\/esferas.org\/msqlu\/2016\/10\/18\/sorteando-una-pagina-web-erronea-con-wordpress-multisite\/\">mencion\u00e9 aqu\u00ed<\/a>, dado que, por ahora, vamos a mantener la p\u00e1gina web est\u00e1tica de la que me quej\u00e9.<\/p>\n<p><!--more--><\/p>\n<h3>El escenario<\/h3>\n<p>No ser\u00eda mayor problema si no fuese porque la administraci\u00f3n principal de la instalaci\u00f3n est\u00e1 en <em>empresa.net<\/em> y yo necesito moverla a <em>blog.empresa.net<\/em> o no podr\u00e9 a\u00f1adir nuevos complementos, ni temas, ni actualizar, ni nada (un drama).<\/p>\n<p>Por lo que he podido entender de la <a href=\"https:\/\/codex.wordpress.org\/Changing_The_Site_URL\">lectura de la documentaci\u00f3n<\/a>, existen dos URL importantes en una instalaci\u00f3n de este tipo.<\/p>\n<ul>\n<li>El URL del sitio (<em>site address<\/em>) que es donde se espera que la gente acceda al contenido.<\/li>\n<li>El URL de la instalaci\u00f3n (<em>wordpress address<\/em>) que es donde residen los programas del n\u00facleo.<\/li>\n<\/ul>\n<p>Las opciones que tengo, sin a\u00f1adir un nuevo servidor virtual al DNS, son:<\/p>\n<ol>\n<li>Emplear el nombre de la m\u00e1quina principal (<em>http:\/\/tlp.empresa.net<\/em>) como sede del n\u00facleo de WordPress.<\/li>\n<li>Seguir usando el mismo URL pero cambiando el puerto (<em>http:\/\/empresa.net:9999<\/em> por ejemplo).<\/li>\n<\/ol>\n<p>La primera opci\u00f3n tiene la dificultad de que tengo varios servicios m\u00e1s all\u00ed situados, en directorios, y me ver\u00eda obligado a quit\u00e1rselos a WordPress con redirecciones desde el servidor web. No es complicado pero no me termino de sentir a gusto. Tambi\u00e9n es cierto que ya de paso podr\u00eda situarlos todos bajo un lugar y as\u00ed minimizar la configuraci\u00f3n. Algo como <em>https:\/\/empresa.net\/admin\/mysql<\/em> para el programa phpmyadmin y dem\u00e1s.<\/p>\n<p>La segunda opci\u00f3n parece menos farragosa pero tengo mis dudas acerca de si en el URL base de WordPress se admite bien el puerto. Y tampoco las tengo todas conmigo dado que la instalaci\u00f3n es <em>multiblog <\/em>y se menciona mucho la actualizaci\u00f3n de la base de datos como soluci\u00f3n a \u00e9ste problema.<\/p>\n<p>He estado mirando la configuraci\u00f3n est\u00e1ndar de WordPress para un sitio <em>multiblog<\/em> y se presenta as\u00ed en el archivo <code>.htaccess<\/code>:<\/p>\n<pre class=\"lang:apache decode:true \">RewriteEngine On\r\nRewriteBase \/\r\nRewriteRule ^index\\.php$ - [L]\r\n\r\n# add a trailing slash to \/wp-admin\r\nRewriteRule ^wp-admin$ wp-admin\/ [R=301,L]\r\n\r\nRewriteCond %{REQUEST_FILENAME} -f [OR]\r\nRewriteCond %{REQUEST_FILENAME} -d\r\nRewriteRule ^ - [L]\r\nRewriteRule ^(wp-(content|admin|includes).*) $1 [L]\r\nRewriteRule ^(.*\\.php)$ $1 [L]\r\nRewriteRule . index.php [L]\r\n<\/pre>\n<p>Esto es, si lo que solicitan es un archivo o un directorio existente se usa como definitivo. En caso contrario entra dentro de los mecanismos del programa y lo gestiona WordPress.<\/p>\n<p style=\"padding-left: 30px;\"><strong>Nota:<\/strong> Por si acaso he realizado una prueba creando un enlace simb\u00f3lico en <code>\/var\/www\/wordpress\/ldap<\/code> a <code>\/usr\/share\/phpldapadmin\/<\/code> y, solicitando la p\u00e1gina principal del blog de esta forma <em>https:\/\/blog.empresa.net\/ldap,<code><\/code><\/em> se accede directamente al programa <em>phpldapadmin.<\/em><\/p>\n<p>As\u00ed que el plan es el siguiente:<\/p>\n<ol>\n<li>Mover todas las aplicaciones web que est\u00e1n ahora en el ra\u00edz de <em>tlp.empresa.net<\/em> a una ruta especial (\/admin):\n<ol>\n<li>La mayor parte de estas aplicaciones web (<em>piwik<\/em>, <em>phpldapadmin<\/em> y dem\u00e1s) son simples enlaces simb\u00f3licos al directorio donde residen los archivos correspondientes<\/li>\n<li>Tambi\u00e9n me permite someterlos todos a un control extra de acceso para que no est\u00e9n tan expuestos.<\/li>\n<\/ol>\n<\/li>\n<li>Cambiar el URL del blog principal de WordPress para dejar libre el dominio ra\u00edz hasta que tengamos alguna soluci\u00f3n alternativa.<\/li>\n<\/ol>\n<h3>Moviendo aplicaciones web<\/h3>\n<p>Con m\u00e1s o menos acierto he conseguido que las aplicaciones web que utilizo para administrar ciertos aspectos del servidor aparezcan ahora reunidas bajo una misma URL: <em>https:\/\/tlp.empresa.net\/admin<\/em>.<\/p>\n<p>Para ello he tenido que crear un directorio con enlaces a todos ellos<\/p>\n<pre class=\"lang:sh decode:true\">root@tlp:\/var\/www# ls -ltra webapps\/\r\ntotal 8\r\ndrwxr-xr-x 8 www-data root 4096 oct 19 10:11 ..\r\nlrwxrwxrwx 1 root     root   24 oct 19 10:11 ldap -&gt; \/usr\/share\/phpldapadmin\/\r\nlrwxrwxrwx 1 root     root   22 oct 19 10:11 mysql -&gt; \/usr\/share\/phpmyadmin\/\r\nlrwxrwxrwx 1 root     root   11 oct 19 10:18 piwik -&gt; \/opt\/piwik\/\r\nlrwxrwxrwx 1 root     root   31 oct 19 10:19 users -&gt; \/usr\/share\/ldap-account-manager\r\ndrwxr-xr-x 2 root     root 4096 oct 19 10:19 .\r\nroot@tlp:\/var\/www#<\/pre>\n<p>y un archivo de configuraci\u00f3n en el servidor web:<\/p>\n<pre class=\"lang:apache decode:true\">Alias \/admin \/var\/www\/webapps\r\n\r\n&lt;Directory \"\/var\/www\/webapps\"&gt;\r\n        Options Indexes FollowSymLinks\r\n&lt;\/Directory&gt; \r\n<\/pre>\n<p>Aunque \u00e9sto es s\u00f3lo para que se pueda acceder a las aplicaciones bajo un \u00fanico punto. Queda el detalle de conservar la configuraci\u00f3n espec\u00edfica de cada una de ellas, compleja en algunos casos, que suele estar en un archivo de nombre <em>apache.conf<\/em> en su directorio de configuraci\u00f3n.<\/p>\n<p>Por ejemplo la aplicaci\u00f3n <em>phpldapadmin<\/em> define sus ajustes en <em>\/etc\/phpldapadmin\/apache.conf<\/em>\u00a0 as\u00ed que lo que hacemos es incluirla de forma global en la configuraci\u00f3n del servidor. Esto es, copiamos el archivo a <em>\/etc\/apache2\/conf-available<\/em> y la activamos con el programa <em>a2econf<\/em>. Con el resto seguimos el mismo procedimiento.<\/p>\n<h3>Protegiendo aplicaciones web<\/h3>\n<p>Dado que tengo instalado en el servidor un directorio LDAP contra el que verifico la identidad de los usuarios he buscado lo mismo para proteger un URL del servidor web. El m\u00f3dulo <a href=\"https:\/\/httpd.apache.org\/docs\/2.4\/mod\/mod_authnz_ldap.htm\">authnz_ldap <\/a>viene incluido en la instalaci\u00f3n del paquete Debian por lo que no hay m\u00e1s que pasar a configurarlo y asignarlo a la zona que queremos proteger.<\/p>\n<p>En este caso lo que he hecho ha sido a\u00f1adir la siguiente estrofa a la configuraci\u00f3n del directorio de estas aplicaciones:<\/p>\n<pre class=\"lang:apache decode:true\">Alias \/admin \/var\/www\/webapps\r\n\r\n&lt;Directory \"\/var\/www\/webapps\"&gt;\r\n        Options Indexes FollowSymLinks\r\n&lt;\/Directory&gt;\r\n\r\n&lt;Location \/admin&gt;\r\n        AuthType Basic\r\n        AuthBasicProvider ldap\r\n        AuthName \"Herramientas administrativas\"\r\n        AuthLDAPURL \"ldap:\/\/localhost\/ou=users,dc=empresa,dc=net?uid?sub?(objectClass=*)\"\r\n        Require valid-user\r\n&lt;\/Location&gt;\r\n\r\n<\/pre>\n<p>Y funciona estupendamente; me he limitado a indicar que cualquier usuario registrado en el directorio LDAP pueda entrar dado que me parece que como primera barrera es m\u00e1s que suficiente. Se pueden usar grupos o cuentas espec\u00edficas pero est\u00e1 m\u00e1s all\u00e1 de lo que pretendo.<\/p>\n<h3>Cambiando la URL principal de WordPress<\/h3>\n<p>En las instalaciones simples, las que s\u00f3lo gestionan un blog, es m\u00e1s sencillo realizar los cambios dado que no es necesario internarse en la base de datos y se pueden cambiar los valores en la configuraci\u00f3n. Ojo que \u00e9sto es lo que he le\u00eddo, no he llegado a comprobarlo porque no he tenido necesidad.<\/p>\n<p>En este caso actuar\u00e9 en dos sitios: la base de datos y la configuraci\u00f3n.<\/p>\n<h4>En la base de datos<\/h4>\n<p>Respecto a la base de datos existen algunos complementos que permiten realizar b\u00fasquedas y sustituciones de valores en las tablas, pero en mi caso prefiero estudiar primero la estructura y realizar los cambios empleando un acceso directo a la base de datos.<\/p>\n<p>Seg\u00fan la <a href=\"https:\/\/codex.wordpress.org\/Database_Description#Multisite_Table_Overview\">documentaci\u00f3n<\/a> referente a las instalaciones multi-blog existen tablas globales y <a href=\"https:\/\/codex.wordpress.org\/Database_Description#Table:_wp_options\">tablas particulares<\/a> para cada blog. Dado que la caracter\u00edstica <em>multisite<\/em> es un a\u00f1adido, las tablas particulares sin un n\u00famero en el nombre hacen referencia al primer blog (<em>wp_options<\/em>); las siguientes comienzan por el n\u00famero dos y lo intercalan en el nombre. Esto es, los par\u00e1metros del segundo blog se guardar\u00edan en <em>wp_2_options<\/em> y as\u00ed sucesivamente.<\/p>\n<ul>\n<li>Tablas globales\n<ul>\n<li><strong>wp_blogs<\/strong>: cada blog creado queda registrado aqu\u00ed con su identificador num\u00e9rico global, el dominio bajo el que se aloja y la ruta dentro de \u00e9l.<\/li>\n<li><strong>wp_site<\/strong>: contiene la direcci\u00f3n del blog principal y, por ende, la que da acceso al escritorio principal de la instalaci\u00f3n. Contiene el identificador num\u00e9rico del blog, el dominio y la ruta.<\/li>\n<li><strong>wp_sitemeta<\/strong>: conserva los par\u00e1metros generales de cada blog, incluyendo el usuario administrador, el nombre del blog y la descripci\u00f3n.<\/li>\n<\/ul>\n<\/li>\n<li>Tablas espec\u00edficas\n<ul>\n<li><strong>wp_options<\/strong> o <strong>wp_N_options<\/strong>: almacenan los par\u00e1metros del men\u00fa de administraci\u00f3n del blog que pueden consultarse <a href=\"https:\/\/codex.wordpress.org\/Option_Reference\">en la referencia oficial<\/a>, y otros <em>detalles<\/em> como la URL del blog (<em>siteurl<\/em>) y la URL de la instalaci\u00f3n <em>(home<\/em>).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>En mi caso necesito que el blog principal que estaba situado en <em>https:\/\/empresa.net<\/em> pase a estar en <em>https:\/\/tlp.empresa.net<\/em>. S\u00e9 que voy a tener un problema despu\u00e9s, al crear otros blogs, porque WordPress, en las instalaciones basadas en subdominios, considera que los otros blogs se situan siempre en un dominio de nivel superior al indicado en el principal. Si \u00e9ste se encuentra en <em>empresa.net<\/em> los siguientes blogs estar\u00e1n en <em>nombre.empresa.net<\/em> y no al mismo nivel. Cruzar\u00e9 ese puente cuando llegue a \u00e9l. Por ahora voy a cambiar las URL en las siguientes tablas:<\/p>\n<ol>\n<li><em>wp_site<\/em> porque guarda el dominio principal.<\/li>\n<li><em>wp_sitemeta<\/em> porque el URL del blog est\u00e1 almacenado all\u00ed.<\/li>\n<li><em>wp_blogs<\/em> porque es d\u00f3nde se localizan todos los blogs por URL.<\/li>\n<li><em>wp_options<\/em> por la misma raz\u00f3n pero ya a nivel local del primero de los blog.<\/li>\n<\/ol>\n<h4>En la configuraci\u00f3n<\/h4>\n<p>En el archivo <code>\/var\/www\/wordpress\/wp_config.php<\/code> me he asegurado de definir lo siguiente:<\/p>\n<pre class=\"lang:php decode:true\">define('SUBDOMAIN_INSTALL', true);\r\ndefine('DOMAIN_CURRENT_SITE', 'tlp.empresa.net');\r\ndefine('PATH_CURRENT_SITE', '\/');\r\ndefine('SITE_ID_CURRENT_SITE', 1);\r\ndefine('BLOG_ID_CURRENT_SITE', 1);\r\n<\/pre>\n<p>Y eso es todo. He reiniciado por si acaso el servidor web y accedido al sitio sin ning\u00fan problema; los URL de las entradas y los programas se construyen al vuelo e incluso he podido recuperar contrase\u00f1as.<\/p>\n<p>S\u00f3lo queda recordarme que para gestionar la red no vale con un usuario con rol administrativo, es necesario que sea el <strong>super administrador<\/strong>, esto es, el usuario con el identificador con valor 1 en la tabla <em>wp_users<\/em>.<\/p>\n<p>Enlaces y referencias<\/p>\n<ul>\n<li><a href=\"https:\/\/httpd.apache.org\/docs\/2.4\/mod\/mod_authnz_ldap.html\">Apache Module mod_authnz_ldap<\/a><\/li>\n<li><a href=\"https:\/\/halfelf.org\/2010\/dig-yourself-out-of-a-hole-multisite-edition\/\">Dig Yourself Out of a Hole \u2013 Multisite Edition.<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Database_Description\">WordPress Database description<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; en la instalaci\u00f3n multisite que mencion\u00e9 aqu\u00ed, dado que, por ahora, vamos a mantener la p\u00e1gina web est\u00e1tica de la que me quej\u00e9.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[516],"tags":[18,75,41,451],"class_list":["post-1911","post","type-post","status-publish","format-standard","hentry","category-wordpress","tag-administracion-de-sistemas","tag-apache","tag-debian","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/1911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=1911"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/1911\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=1911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=1911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=1911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}