WordPress MU y dominios www

[spanish]
El WordPress MU (no sé si el normal también) advierte en la instalación que NO te va a dejar llamar a tu página www.dominio.tld siguiendo la «doctrina» de no-www.org. Pues yo creo que los www SI que importan, voy a explicar por qué y cómo eliminar este filtro de WPMU.

¿Por qué llamar a mi web www.dominio.tld y no dominio.tld a secas? En primer lugar, porque me da la real gana, para eso es mi web y los desarrolladores de WPMU no son nadie para decidir lo contrario (con el debido respeto por el programa cojonudo que han hecho).

En segundo lugar, en la web de no-www.org comentan que consideran redundante poner www para indicar que es una página web, pues eso ya va indicado en el protocolo (el «http://»), que a su vez hace que se use un puerto u otro, de forma que se puede tener sin problemas http://dominio.tld, ftp://dominio.tld, etc. Pero al decir ésto no con conscientes de que acarrea un problema: ¿y si esos dos servicios no están en la misma máquina? Si, si son dos máquinas en nuestra misma red y tenemos control de los routers de entrada, hacemos NAT de unos puertos y otros a máquinas distintas y solucionado. Pero, ¿y si uno de esos servicios lo tenemos en nuestra red y el otro en un proveedor externo?

Imaginaros una pequeña empresa que se monta su web y un ftp para intercambiar información, y decide llamarlos «dominio.tld» a secas. En el DNS, dominio.tld apunta a la IP de su ADSL y con NAT redirige los puertos 21 y 80 a máquinas distintas. Sin problemas. Pero con el tiempo la empresa crece y la web tiene cada vez más visitas, el ADSL no da más de si y deciden sacarlo a un hosting externo que se coma todo ese tráfico. ¿Qué hacer? El DNS trabaja a nivel IP, no de IP:puerto, así que no puedes dirigir dominio.tld:80 a una IP y dominio.tld:21 a otra. Tendrían que renombrar uno de los dos servicios (www.dominio.tld o ftp.dominio.tld), que según los servicios implicados, el uso que se les dé y el tipo y cantidad de usuarios puede ser un problema serio.

Y lo digo por experiencia propia: en el servidor de correo de la empresa donde trabajo siempre habíamos definido los dominios correo.dominio.tld, pop, pop3, smtp y webmail, aunque en realidad todos apuntaban a la misma IP, y por comodidad al final la mayoría de la gente sólo usaba «correo.dominio.tld». El caso es que por cambios en la estructura de la red y los servidores necesitamos separar ciertos servicios por IPs, con lo que smtp ahora apunta a una IP y pop, imap y webmail a otra. Pero claro, ¿qué pasa ahora con este «correo.dominio.tld» tan genérico y la gente que lo usaba para todo? Varios meses después de avisar y realizar el cambio, aún tenemos incidencias sobre esto. ~:-/

En resumen: que no está de más llamar a las cosas por su nombre, y a pesar de que el protocolo pueda identificar distintos servicios bajo un mismo nombre, esta política de «un nombre para todo y ya haremos NAT» puede acarrearnos problemas en el futuro.

Y por supuesto, todo esto sólo tiene sentido hablando del WPMU si vamos a organizar los distintos blogs por directorios (www.dominio.tld/un_blog)  y no por subdominios (blog.dominio.tld).

Volviendo al WordPress, para eliminar el filtro que impide usar dominios empezando por «www.» hay que comentar en el fichero wpmu-settings.php las líneas 8 y 9 (ver más abajo) y arreglar el dominio en las tablas «wp_site» y «wp_blogs» y en la página de administración blog por blog en todos los campos que aparezca. Durante todo el proceso es conveniente que el servidor reconozca ambos dominios, con y sin el «www.», o podremos quedarnos bloqueados después de alguon de los pasos. Cuando hayamos acabado se puede volver a apuntar el dominio base donde estuviera y empezar a usar la versión con el «www».

[/spanish]
[english]

WordPress MU warns you during the install process that it will NOT let you use a www. domain for your page like in www.domain.tld, following the trend by no-www.org. I think that this www MATTERS, I’m going to explain why and how to remove this limit from WPMU so that you can use a www. domain.

Why would I want to call my page www.domain.tld and not just domain.tld? On the first place, because it’s my web and my domain and I’m free to choose the name I want. With all due respect for the otherwise great program they’ve made, the WPMU developers don’t have the right to force their particular beliefs or preferences on me.

On the second place, the main argument on the no-www.org web against using the «www.» seems to be that they think it’s redundant, so the protocol part on the URI («http://») already tells you that it’s a web. It also tells the browser that it should use a given port instead of another, so you should be able to have http://domain.tld, ftp://domain.tld and so forth without any problems. But saying this they don’t realize there are problems ahead: what if those two services don’t run on the same machine? If both machines are on your local network and you control the routers, you can NAT each port to a different computer. Big deal. But, what if you want to move one of those services to an external provider?

Picture yourself a small company that puts online its public web and a private ftp, and decides to call both just «domain.tld». On their DNS, domain.tld points to their DSL’s IP address, and using NAT they point ports 21 and 80 to different servers. No problem. But time goes on, the company grows, their web attracts a lot more traffic and their DSL line can’t handle it any longer. They decide to move their web to an external hosting compay but want to keep the private ftp on their server. What now? DNS works at IP level, not IP:port level, so you can’t point domain.tld:80 to an IP address and domail.tld:21 to another. This company would have to rename one of their services (www.domain.tld or ftp.domain.tld), which depending on the service itself, the use they make of it, and the type and number of users can be quite a seriuos issue.

I’ve suffered this very problem myself: on the DNS of the company I work for, we’ve always setup the mail.domain.tld, smtp, pop, pop3, imap and webmail domain names for our mail server, despite all of them pointed to the same IP address. But with time and out of lazyness, almost everybody ended up using just the generic «mail.domain.tld» for every protocol. The thing is that because of some network and server restructuring we had to undertake, we needed to take services appart, having smtp on one IP and the other protocols on another. So, what happens to the generic «mail.domain.tld» name and all the people that used it for both smpt, pop and webmail? After several months of warning about the change and actually making it, we still get some calls about the mail server «not working» because of this…

All in all: it’s a good practice calling independent services by their names, and even if the protocol can identify one service from another under the same name, this policy of «one easy to remember name for everything and we’ll do NAT if we need to» can lead to deep trouble.

And of course, all of this only makes sense in WPMU if you plan to organize your blogs in folders (www.domain.tld/myblog)  and not in subdomains (myblog.domain.tld).

Back to WordPress, in order to remove the anti-www filter you only need to comment lines 8 and 9 on the wpmu-settings.php file (see below), check and maybe fix the domain on the «wp_site» and «wp_blogs» tables, and on the admin pannel go through all the blogs fixing the domain in every entry you find it. Before you do this, be sure to check that your server responds to both the domain with and without «www.», or else you may end up with an unaccessible page after one of these steps. When you’re done with all the modifications, you can point the base domain back where it was and stick with the «www.» version.

[/english]

[code lang=»php»]

$domain = addslashes( $_SERVER[‘HTTP_HOST’] );
//if( substr( $domain, 0, 4 ) == ‘www.’ )
// $domain = substr( $domain, 4 );
if( strpos( $domain, ‘:’ ) ) {
if( substr( $domain, -3 ) == ‘:80’ ) {
[/code]

3 comentarios sobre “WordPress MU y dominios www”

  1. Vaya, muchas gracias por el comentario. Me alegro de que te haya gustado el artículo. :)
    Yo es que ya he sufrido en mis carnes el «un dominio para todo y luego NAT de puertos». Una y no más, cada servicio con su nombre, que para eso está el DNS. :D

  2. Amazingly this tip still seems to work even after all these months. I’d like to add that if you want to force the www version you can just replace the lines 9-10 in wpmu-settings.php with these lines

    if( substr( $domain, 0, 4 ) != ‘www.’ )
    $domain = «www.».$domain;

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.