Solucionar problemas con URLs limpias en Drupal 8
Fundamentos
En Drupal 8, las URLs limpias están habilitadas por defecto y no se pueden desactivar. Sin embargo, el módulo de reescritura debe estar instalado en tu servidor web.
Revisa la barra de direcciones de tu navegador. Las URLs de tu sitio no deben contener ?q=
en la URL.
Ejemplo de URLs limpias correctas:
http://www.example.com/node/83
Ejemplo de URLs limpias que no funcionan:
http://www.example.com/?q=node/83
Existen instrucciones adicionales para configurar URLs limpias en diferentes sistemas, como apache, wamp, xampp e IIS.
Configuración del servidor para URLs limpias
Puedes leer más sobre otros requisitos del servidor web.
Configuración del servidor para URLs limpias en servidor dedicado con httpd.conf
Habilitar URLs limpias en un servidor dedicado implica los siguientes pasos:
1. Activa mod_rewrite para Apache. Puedes consultar con tu proveedor de hosting o la documentación de Apache para mod_rewrite para más información. Como mínimo, debes asegurarte que mod_rewrite está habilitado en tu instalación de Apache.
Para comprobar si mod_rewrite está disponible en Apache2, ejecuta en la línea de comandos:
apache2ctl -M
En algunos sistemas este comando puede ser:
apachectl -M
o
httpd -M
2. En la salida, verifica que rewrite_module
esté en la lista de módulos.
Si el módulo de reescritura no aparece, necesitarás compilarlo o habilitarlo como módulo cargable. Normalmente, puedes hacer que Apache cargue el módulo incluyendo:
LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c
en tu archivo de configuración de Apache (consulta más abajo sobre el archivo de configuración). Asegúrate de descomentar AddModule mod_rewrite.c
si está comentado. También puede funcionar habilitar el módulo sin editar archivos con:
a2enmod rewrite
Ten en cuenta que estos métodos pueden no funcionar para todas las combinaciones de sistema operativo y Apache; consulta la documentación oficial de Apache para la sintaxis correcta.
No olvides reiniciar Apache para que los cambios tengan efecto.
3. El siguiente paso es localizar el archivo de configuración Apache apropiado para tu sitio. Dependiendo de la configuración de tu servidor, este archivo puede ser httpd.conf, un archivo específico de host virtual (vhost.conf), un archivo de sitio definido (por ejemplo, "default") o apache2.conf. Usualmente están en /etc/httpd/conf, /etc/apache2 o subdirectorios. Si no, usa el comando:
find /etc -name httpd* or find /etc -name apache2*
para encontrar el archivo si está en otra ubicación de tu sistema de archivos.
Si no tienes permisos de escritura en estos archivos y las URLs limpias no funcionan de forma predeterminada, puede que necesites contactar a tu administrador de sistemas o proveedor de hosting. Sin embargo, aún podrás leer estos archivos de configuración para intentar solucionar problemas.
4. El siguiente paso es copiar o incluir las configuraciones de Drupal directamente en el archivo de configuración. Aquí tienes instrucciones para habilitar las directivas de Drupal en el archivo de configuración. Consulta el archivo .htaccess de Drupal para ejemplos de reglas, tales como estas para Drupal 8:
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^ index.php [L]
O este ejemplo para Debian 8 + Apache2 + ISPConfig usando comodines para todos los sitios instalados:
<Directory /var/www/clients/*/*/web/> RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </Directory>
Asegúrate de revisar el archivo .htaccess de la versión principal de Drupal que uses (por ejemplo, 8.x).
Nota: si no deseas poner las reglas de reescritura en el archivo de configuración de Apache, aún puedes usar el archivo .htaccess de Drupal (como en hosting compartido). Necesitarás configurar la directiva AllowOverride en el archivo de configuración Apache para permitir que .htaccess funcione:
AllowOverride All AccessFileName .htaccess
Consulta “Behind the scenes” con Apache .htaccess para un análisis detallado. También puede ser útil revisar ejemplos de las directivas AllowOverride de Apache 2.
Nota sobre MultiViews: Apache soporta una función llamada “MultiViews” (o “Content Negotiation”), que permite acceder a páginas sin necesidad de la extensión del archivo. Por ejemplo, si tienes un archivo llamado “valuation.txt”, un sitio con MultiViews podría acceder a él con la URL “example.com/evaluation”. Aunque MultiViews puede ser útil si se usa con conocimiento, puede causar problemas cuando las URLs limpias de Drupal están habilitadas. Si no sabes lo que haces, no uses MultiViews si planeas usar URLs limpias en Drupal. Sin embargo, MultiViews no está habilitado por defecto en Apache, por lo que probablemente esta nota no aplique. Consulta la documentación de Apache sobre MultiViews.
Configuración del servidor para URLs limpias en hosting compartido con .htaccess
La instalación estándar de Drupal incluye un archivo .htaccess de ejemplo, suficiente para habilitar URLs limpias. Copiar este archivo puede pasarse por alto por tener un punto inicial en el nombre. Así que antes de habilitar URLs limpias, asegúrate que este archivo exista en tu instalación Drupal.
Para comprobarlo en terminal, usa ls -a
para listar archivos ocultos.
Si tienes el archivo pero las URLs limpias no funcionan, prueba algunos consejos de solución de problemas a continuación. Si no puedes hacerlas funcionar, contacta con tu proveedor de hosting.
Solución de problemas
Verifica que se esté usando .htaccess
Apache debe estar configurado explícitamente para respetar las instrucciones del archivo .htaccess de tus sitios. Esto está deshabilitado por defecto, aunque la mayoría de hostings lo activan. La directiva AllowOverride All que mencionamos arriba es la que habilita .htaccess.
Para comprobar si tu host lee el archivo .htaccess, agrega temporalmente una línea inválida en el archivo para "romperlo". Tu sitio debería devolver un error 500 inmediatamente al cargar una página en ese directorio debido a la mala configuración. (Elimina esa línea inmediatamente después.)
Si lo haces y tu sitio no falla, entonces .htaccess está siendo ignorado y no podrás usar URLs limpias hasta que tu hosting lo active o lo habilites en httpd.conf como se describió. Algunos hostings permiten activar esta opción desde su panel de control, así que revisa primero ahí.
Configuración de RewriteBase
El parámetro principal de configuración que puede que necesites cambiar es RewriteBase. Puede estar en el archivo .htaccess de Drupal o en httpd.conf, según dónde pongas las reglas de reescritura (ver arriba). Por defecto, RewriteBase está comentado en .htaccess de Drupal, y funciona para muchas configuraciones.
Si tienes problemas con URLs limpias, es posible que debas ajustar este parámetro. Por ejemplo, si tu DocumentRoot de Apache es /var/www (es decir, /var/www/index.html se muestra cuando apuntas tu navegador a http://www.example.com/), y Drupal está instalado en /var/www/mysite/, entonces RewriteBase podría configurarse como:
RewriteBase /mysite
y esto podría ayudar. En algunas configuraciones, usar
RewriteBase /
hará que las URLs limpias funcionen.
$base_url
Puede que necesites establecer manualmente la variable $base_url
en settings.php si no está definida. Se sabe que servidores con FastCGI tienen problemas si esta variable está comentada (ver http://bugs.php.net/bug.php?id=19656).
Multi-sitio
RewriteBase funciona cuando tu instalación Drupal sirve un solo sitio, o cuando todos los sitios están en el mismo subdirectorio de sus dominios. Por ejemplo,
RewriteBase /
funcionará para estos sitios:
http://www.example.com/
http://www.example2.com/
http://www.example3.com/
Y
RewriteBase /mysite
funcionará para estos sitios:
http://www.example.com/mysite
http://www.example2.com/mysite
http://www.example3.com/mysite
Sin embargo, si los sitios están en subdirectorios diferentes, RewriteBase no funcionará. Deberás crear reglas específicas para cada subdirectorio. Por ejemplo, tu instalación Drupal puede servir estos sitios:
http://www.example.com/
http://www.example.com/mysite
Para habilitar URLs limpias para ambos, debes agregar:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^/mysite/ RewriteRule ^ /mysite/index.php [L]
antes de las reglas de reescritura existentes.
Ubicación del archivo index.php
Para algunas configuraciones de servidor puede ser necesario modificar el archivo .htaccess de Drupal. Busca una línea similar a esta al final del archivo .htaccess de Drupal:
RewriteRule ^ index.php [L]
Es posible que necesites reemplazar index.php
con la ruta URL al archivo index.php de tu instalación Drupal (solo la parte después del URL base). Por ejemplo, si la página principal de tu sitio es http://example.com/subdir/, puede que necesites usar /subdir/index.php en lugar de index.php. Si la página principal es http://example.com/, puede que necesites usar /index.php. Esto es necesario en algunas configuraciones, pero no en todas.
Genera URLs limpias con el módulo Path
Usar URLs limpias hará que Drupal genere URLs en la forma "http://www.example.com/node/83". Para cambiar la parte "node/##" por algo más amigable como "news/june-1st-news", el sitio debe habilitar el módulo Path. Consulta la guía del módulo Path para más información sobre su uso.
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.