Agregue un subdirectorio a la URL de WP-CONTENT usando HTACCESS en WordPress Multisite

5 minutos de lectura

Estoy en el proceso de transición de mi instalación de WordPress de un solo sitio a un sitio múltiple. Estoy tratando de arreglar el CSS/JS roto de mi sitio principal.

Actualmente tengo dos sitios en mi red:

Mi instalación multisitio está dentro de un subdirectorio que llamaremos “wordpress“. Así que la ruta del archivo se ve como public_html/wordpress.

Mi objetivo es que ninguno de los sitios tenga el subdirectorio “wordpress” en la URL. Todo parece estar funcionando excepto por CSS y JS rotos en el sitio principal (el sitio secundario se ve bien).

Al inspeccionar el código, todas las llamadas CSS y JS apuntan a http://www.ejemplo.com/wp-content/ pero los archivos no se encuentran allí. Los archivos se encontrarán si voy a http://www.ejemplo.com/wordpress/wp-content en mi navegador. Quiero ocultar la carpeta de wordpress y aún poder recuperar los archivos.

Estoy confundido sobre cómo configurar el archivo HTACCESS. Ya le hice algunos cambios iniciales para que funcione el multisitio dentro del subdirectorio. Todas estas fueron las siguientes guías que encontré en StackOverflow y en otros lugares en línea con respecto a cómo mover su sitio a un sitio múltiple con subdirectorio y ocultar el subdirectorio. No he encontrado nada sobre cómo abordar el problema de CSS/JS roto.

Pensé que necesitaba actualizar uno o más de los 3 archivos HTACCESS.

1.) public_html/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/wordpress/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /wordpress/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ /wordpress/index.php [L] 
</IfModule>

2.) public_html/wordpress/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /wordpress/
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>

3.) public_html/wordpress/wp-content/.htaccess
Este archivo no existía pero lo creé. Pensé que los archivos se llaman sin el subdirectorio de wordpress, pero deben actuar como si tuvieran el subdirectorio incluido en ellos. Por ejemplo, actualmente http://www.ejemplo.com/wp-content/uploads/image.jpg esta rota pero http://www.ejemplo.com/wordpress/wp-content/uploads/image.jpg obras. Quiero que sea al revés o quiero que ambos caminos funcionen.

<IfModule mod_rewrite.c>
RewriteEngine on
# ADD WORDPRESS IF URL DOES NOT HAVE IT
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/wordpress/
RewriteRule ^(.*)$ /wordpress/$1
</IfModule>

Intenté agregar diferentes líneas a los distintos archivos HTACCESS pero ninguno de ellos funcionó. Tampoco estoy seguro de qué número de línea debo insertar una nueva regla. Es posible que una de mis nuevas reglas sea correcta pero esté en el lugar equivocado. A continuación se muestra uno que realmente pensé que funcionaría pero no lo hizo.

RewriteRule ^/wp-content/(.*)$ /wordpress/wp-content/$1 [R=301,NC,L]

  • Supongo que el segundo se genera después de habilitar multisitio. Si es cierto, el lugar correcto está en el primer archivo “htaccess”. Seguro que no necesitas el tercer archivo.

    – BlueSuiter

    3 de noviembre a las 4:20


  • Si eso es verdad. El segundo provino de guías que encontré en línea sobre cómo habilitar la función multisitio. Eliminé el tercer archivo htaccess y puse el código en el primer htaccess (el que está debajo de la raíz public_html) pero nada cambió.

    – bolos

    4 de noviembre a las 1:45

Avatar de usuario de Valeriu Ciuca
valeriu ciuca

En primer lugar, debe eliminar todos los .htaccess archivos y mantener sólo el que está en la raíz: public_html/.htaccess

En segundo lugar, su última regla no funciona porque es un poco incorrecta.

Deberías cambiarlo de:

RewriteRule ^/wp-content/(.*)$ /wordpress/wp-content/$1 [R=301,NC,L]

A:

RewriteRule ^wp-content/(.*)$ wordpress/wp-content/$1 [L,NC]

Porque no necesitas el arranque / y no necesita una redirección 301. Quieres mantener tu wordpress carpeta oculta y simplemente asigne las URL solicitadas desde wp-content/(.*) a wordpress/wp-content/$1

Además, esta regla debe ser la primera en su archivo .htaccess para tener prioridad sobre las siguientes reglas predeterminadas de WordPress. Tu final y solamente .htaccess de public_html/ debería verse así:

RewriteEngine On
RewriteBase /
RewriteRule ^wp-content/(.*)$ wordpress/wp-content/$1 [L,nc]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Espero que te ayude.

avatar de usuario de mlegrix
mlegrix

No debería tener que configurar varios .htaccess archivos en sus subdirectorios.

El único .htaccess El archivo que debe modificarse es el que se encuentra en el directorio raíz de la aplicación. En tu caso, parece ser tu public_html/.htaccess o tu public_html/wordpress.

Ahora por defecto WordPress genera un .htaccess archivo en ese directorio que se parece a lo siguiente:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Para reescribir sus URL, debe agregar sus RewriteRules antes del bloque de código de WordPress. Dado que las reglas de reescritura se procesan de arriba a abajo, si la solicitud se vuelve a escribir primero en index.php por el bloque de WordPress, su regla nunca será procesada.

Por lo tanto, su RewriteRule:

RewriteRule ^/wp-content/(.*)$ /wordpress/wp-content/$1 [R=301,NC,L]

debería ser suficiente si se coloca en la parte superior del directorio raíz .htaccessy quitar el .htaccess archivo en los subdirectorios

La mayoría Las redes multisitio se instalan en el directorio raíz de su sitio. Esto significa que si su servidor usa example.com, esta será la URL de su sitio base en la red.

Si ha instalado WordPress Multisite en un subdirectorio, entonces no puede usar subdominios.

Si ya tiene una instalación de un solo sitio en example.com y agrega otra instalación de WordPress en un subdirectorio que ejecuta Multisite, su dirección será example.com/wordpress.

Cualquier sitio que cree en su nueva red estará en example.com/wordpress/my-new-site. Aquí sería imposible crear un subdirectorio, ya que tendría que estar en una dirección como ejemplo.com/wordpress/mi-nuevo-sitio.red, que simplemente no funciona.

¿Ha sido útil esta solución?