Configuración del Router
Moodle 5.2
Esta página tiene como objetivo ayudar a los administradores de sistemas a configurar correctamente el motor de enrutamiento. El motor de enrutamiento permite que las solicitudes se distribuyan dinámicamente sin necesidad de almacenar archivos en ubicaciones específicas. El uso de estas rutas puede contribuir a generar URL más amigables, fáciles de recordar y más fáciles de usar. Además, se ha demostrado que esto mejora el posicionamiento SEO. La configuración del enrutador de Moodle es obligatoria a partir de la versión 5.1.
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 a las circunstancias de usted.
Configurar Apache2
Este proceso requiere acceso de Root. Apache2 se puede configurar para que soporte al ruteador Moodle al especificar un FallbackResource en la directiva Directory . en el caso que no estuviera ya definida, también deberá añadir la DirectoryIndex index.php directiva directamente arriba de la directiva FallbackResource para evitar que ocurran errores HTTP 404 con el ruteador Moodle.
DocumentRoot /var/www/moodle/public
<Directory /var/www/moodle/public>
AllowOverride None
Require all granted
DirectoryIndex index.php
FallbackResource /r.php
</Directory>
El FallbackResource es relativo con respecto al DocumentRoot por lo que, en caso de que Moodle esté dentro de un su-directorio, la ruta será relativa con respecto a esa raíz. La directiva Require all granted permite el acceso incondicional a usuarios autenticados.
DocumentRoot /var/www/moodle/public
<Directory /var/www/moodle/public/moodle/public>
AllowOverride None
Require all granted
DirectoryIndex index.php
FallbackResource /moodle/public/r.php
</Directory>
Sin acceso de root
Otra forma de configurar Apache2 es mediante .htaccess, pero no es el método recomendado ni se prueba con regularidad en Moodle HQ.
En el directorio 'public', deberá abrir (o crear) el archivo .htaccess. Añada la siguiente línea al principio del archivo (también puede funcionar en otras partes del mismo).
FallbackResource /r.php
La directiva FallbackResource configura un manejador para cualquier URL que no mapeara a nada en su sistema de archivos de su servidor. El manejador, r.php, ya se encuentra presente dentro del directorio principal de moodle.
Muchos proveedores de alojamiento no permiten la línea anterior en .htaccess y, por lo tanto, no tiene ningún efecto. Aquí hay una solución alternativa que funciona mejor.:
RewriteEngine On
DirectoryIndex index.php
RewriteBase /
# 1. Permitir que los archivos y directorios existentes se carguen normalmente (CSS, JS, imágenes).
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 2. Evite un bucle infinito si el servidor ya está mirando a r.php
RewriteCond %{REQUEST_URI} !^/r\.php
# 3. Redirigir todas las demás solicitudes al nuevo controlador frontal de Moodle.
RewriteRule ^(.*)$ r.php/$1 [L,QSA]
Configurar Nginx
El servidor nginx admite el uso de una directiva try_files , que comprueba la existencia de archivos en el orden especificado, utilizando el primer archivo encontrado para su procesamiento.
location / {
try_files $uri /r.php;
}
Si su sitio Moodle se encuentra en un subdirectorio, tendrá que usar una ubicación más específica.
location /moodle/ {
try_files $uri $uri/ /moodle/r.php;
}
Si aloja varios Moodles, es posible que desee utilizar una expresión regular que distinga entre MAYÚSCULASvy minúsculas para la ubicación:
location ~ ^/(?<sitepath>[^/]*)/ {
try_files $uri $uri/ /$sitepath/r.php;
}
IIS
Nota: Las siguientes instrucciones no han sido probadas. Si tiene conocimientos de IIS y puede proporcionar instrucciones más precisas o actualizadas, por favor, hágalo.
Al usar el módulo URL Rewriter para IIS, usted puede crear una regla de reescritura en su 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 configurar correctamente el enrutador, debe informar a Moodle que está configurado correctamente estableciendo lo siguiente en su config.php
$CFG->routerconfigured = true;
Para probar el sistema, inicie sesión en Moodle, abra un curso y anote el número de identificación en la barra de direcciones, que en este ejemplo es 42.: https://moodle.example.com/course/view.php?id=42. Intente introducir lo siguiente en la barra de direcciones: : https://moodle.example.com/my/course/42/manage. El "my" No debería haber estado ahí, por lo que esto generará una página de error distintiva, como la siguiente.

Usted debe quitar el "my/" de la dirección y esto debería llevarle a la página apropiada.