Configuración del Router
Moodle 5.2
Moodle incluye un motor de enrutamiento que permite atender dinámicamente solicitudes sin archivos en ubicaciones específicas.
El uso de estas rutas puede ayudar a proporcionar URL más atractivas (fancy URL's), fáciles de recordar e intuitivas. Esto también contribuye al posicionamiento SEO del sitio cuando sea posible.
Si bien las versiones anteriores describían el enrutamiento como un requisito, a partir de Moodle 5.1 esto se ha revisado. El enrutamiento es muy recomendable para sitios web tanto nuevos, como actualizados, pero no es obligatorio. Moodle incluye un componente de compatibilidad que permite que los sitios sigan funcionando sin tener configurado el enrutamiento.
Se recomienda encarecidamente a los administradores habilitar el enrutamiento para aprovechar al máximo la nueva arquitectura y garantizar la compatibilidad a largo plazo con futuras versiones de Moodle.
El tipo de enrutador que utiliza Moodle se conoce como controlador frontal.
Qué necesita hacer el servidor web
En muchos casos, el usuario realizará una petición de un archivo que está disponible en el disco. Por ejemplo, si el usuario realiza la petición a través de https://example.com/course/view.php?id=42 entonces estará relacionada con el archivo en /course/view.php
Pero en otros casos, el usuario puede acceder a una dirección que no esté directamente relacionada con un archivo en disco, por ejemplo cuando el usuario solicita https://example.com/course/42/manage que entonces debe ser manejado por el enrutador de Moodle.
El acceso al enrutador de Moodle Router se realiza a través del archivo r.php, que está localizado en el directorio raíz de Moodle.
Cómo configurar el servidor web
Moodle soporta una amplia gama de servidores web. Las instrucciones aquí proporcionadas son de carácter general y es posible que los ejemplos de configuración no se ajusten exactamente al entorno existente.
Configurando Apache2
Sin acceso root
La manera fácil de configurar Apache no requiere de acceso a través de root. En el directorio raíz de Moodle, crea un archivo .htaccess. Añade la siguiente línea al inicio del archivo (es posible que funcione en otros apartados del archivo):
FallbackResource /r.php
La directiva FallbackResource establece un controlador para cualquier URL que no apunte a nada del sistema de archivos. El controlador, r.php, ya está presente en el directorio principal de Moodle.
Con acceso root
Cambiar la configuración de Apache requiere acceso root. Puede que merezca la pena el trabajo adicional de cambiar la configuración, ya que Apache advierte que utilizar .htaccess en lugar de un archivo de configuración dará como resultado un impacto en el rendimiento. La localización de los archivos de configuración se puede realizar con el comando apache2 -V | grep HTTPD_ROOT para distribuciones Debian/Ubuntu o httpd -V | grep HTTPD_ROOT para distribuciones Red Hat/CentOs. Si no puedes localizar la ruta, aquí tienes las localizaciones comunes para diferentes sistemas operativos (en inglés).
Por ejemplo, el resultado del comando apache2 -V en Ubuntu es el siguiente:
# apache2 -V | grep HTTPD_ROOT
-D HTTPD_ROOT="/etc/apache2"
La ruta mostrada es la de los directorios y archivos de configuración de Apache. El siguiente paso es crear un servidor virtual (VirtualHost) en Apache.
Entramos en /etc/apache2 y encontraremos un directorio denominado sites-available. Si Moodle va a ejecutarse desde el directorio raíz del servidor web, entonces podemos editar el archivo del servidor web utilizado por Apache. Si lo vamos a instalar en un directorio aparte, como /moodle o similar, entonces tendremos que crear un archivo específico para el directorio.
Crear un VirtualHost en Apache
Al abrir el directorio, nos encontraremos dos archivos. Uno para configuraciones sin HTTPS (000-default.conf), y otro para las configuraciones con HTTPS (default-ssl.conf). Dependiendo del servidor, es posible que se encuentren más archivos en ese directorio, o incluso que tengan un nombre diferente. Todos son archivos de configuración que Apache carga para crear los Virtualhost.
Para el ejemplo vamos a utilizar el archivo de VirtualHost para peticiones HTTP existente por defecto.
Para comenzar, hacemos una copia de seguridad del archivo de configuración:
$ sudo cp 000-default.conf 000-default.bak
A continuación, editamos el archivo con el editor que dispongamos. Desde terminal es posible utilizar nano, un editor muy simple y que suele venir instalado en casi todas las distribuciones:
$ sudo nano 000-default.conf
En el archivo de configuración añadimos el directorio del VirtualHost que vamos a crear tras la línea que indica el DocumentRoot (sin modificarlo):
| Nota: Desde Moodle 5.1, se ha introducido el directorio /public. Apache debe ser configurado para que la directiva DocumentRoot apunte a la ruta de ese directorio
(por ejemplo: |
DocumentRoot /var/www/html/public
<Directory "/var/www/html/public">
AllowOverride None
Require all granted
DirectoryIndex index.php
FallbackResource /r.php
</Directory>
La directiva FallbackResource es relativa a DocumentRoot, por tanto si Moodle está en un subdirectorio, la ruta será relativa a la raiz (DocumentRoot). La directiva Require all granted permite acceso incondicional a los usuarios autenticados.
La directiva DirectoryIndex se añade para prevenir errores HTTP 404 con el Router redirigiendo las peticiones a index.php.
Si queremos instalar moodle en un subdirectorio de la raíz de Apache, por ejemplo: /var/www/html/moodle, entonces el VirtualHost quedará de la siguiente manera (modificando también el DocumentRoot de Apache):
DocumentRoot /var/www/html/moodle/public
<Directory "/var/www/html/moodle/public">
AllowOverride None
Require all granted
DirectoryIndex index.php
FallbackResource /r.php
</Directory>
(reemplazar 'moodle' por cualquier otro nombre para el subdirectorio)
Guardamos los cambios pulsando CTRL+X y posteriormente la tecla y reiniciamos Apache:
sudo systemctl restart apache2
Configurar Nginx
El servidor web Nginx soporta el uso de la directiva try_files, la cual comprueba la existencia de archivos en un orden especifico, usando el primer archivo encontrado para su proceso.
Si Moodle está instalado en el directorio raíz de Nginx:
location / {
try_files $uri /r.php;
}
Si Moodle se encuentra instalado en un subdirectorio, necesitarás indicar su nombre. En el ejemplo, el directorio se denomina moodle:
location /moodle/ {
try_files $uri $uri/ /moodle/r.php;
}
Si alojas múltiples sitios Moodle, entonces quizás quieras utilizar una expresión regular que distinga entre mayúsculas y minúsculas para la ubicación:
location ~ ^/(?<sitepath>[^/]*)/ {
try_files $uri $uri/ /$sitepath/r.php;
}
Configurar IIS
| Nota: Las siguientes instrucciones no han sido comprobadas. Si tienes conocimiento de IIS y puedes proporcionar información más precisa, o actualizada, entonces puedes ayudar a la traducción de este documento. |
Usando el módulo URL Rewriter para IIS, puedes crear una regla de reescritura (Rewrite rule) en el archivo web.config.
<rewrite>
<rules>
<rule name="Moodle" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="r.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
Configurar Moodle
Después de haber configurado el Router, debes indicarle a Moodle que está correctamente conectado añadiendo la siguiente línea en el archivo config.php
$CFG->routerconfigured = true;
Para comprobar el sistema, entra en Moodle, abre un curso, y anota la id mostrada en la barra de direcciones. Por ejemplo, el curso https://moodle.example.com/course/view.php?id=2 tiene la id 2. Ahora trata de introducir la siguiente dirección: https://moodle.example.com/my/course/2/manage. "my" no debería estar ahí, así que se generará el siguiente error, que se mostrará en pantalla.

Elimina "my/" de la dirección y debería dirigirte a la página correcta.