Wir arbeiten aktuell an der Dokumentation der neuen Funktionalitäten von Moodle 5.2.

Router konfigurieren

Aus MoodleDocs
Wechseln zu:Navigation, Suche

Moodle enthält eine Routing-Engine, mit der Anfragen dynamisch ohne Dateien an bestimmten Speicherorten bedient werden können.

Die Verwendung dieser Routen kann dazu beitragen, schönere URLs bereitzustellen, die leichter zu merken und benutzerfreundlicher sind. Dies soll auch beim SEO-Ranking helfen.

Während frühere Versionen das Routing als eine Anforderung ab Moodle 5.1 beschrieben, wurde dies überarbeitet. Routing wird für neue und aktualisierte Websites dringend empfohlen, ist jedoch nicht zwingend erforderlich. Moodle enthält eine Kompatibilitätsanpassung, die es Websites ermöglicht, ohne konfiguriertes Routing weiter zu funktionieren.

Administrator/innen werden aufgefordert, Routing zu aktivieren, um die Vorteile der neuen Architektur voll auszuschöpfen und die langfristige Kompatibilität mit zukünftigen Moodle-Versionen sicherzustellen.

Der von Moodle verwendete Routertyp wird als Front Controller bezeichnet.

Was der Webserver tun muss

In vielen Fällen fordert jemand eine Datei an, die wie gewünscht auf der Festplatte verfügbar ist. Wenn die Person beispielsweise https://example.com/course/view.php?id=42 anfordert, bezieht sich dies auf eine Datei unter /course/view.php.

In anderen Fällen greift jemand jedoch möglicherweise auf eine URL zu, die nicht direkt mit einer Datei auf der Festplatte verknüpft ist. Wenn die Person beispielsweise https://example.com/course/42/manage anfordert, muss dies stattdessen vom Moodle-Router verarbeitet werden.

Der Moodle-Router befindet sich unter /r.php.

Konfiguration des Webservers

Moodle unterstützt eine Vielzahl von Webservern. Die hier aufgeführten Anleitungen sind allgemeiner Natur und die Konfigurationsbeispiele entsprechen möglicherweise nicht genau Ihren Gegebenheiten.

Apache2 konfigurieren

Ohne Root-Zugriff

Die einfachste Methode zur Konfiguration von Apache2 erfordert keinen Root-Zugriff. Öffnen Sie im Hauptverzeichnis von Moodle die Datei .htaccess (oder erstellen Sie sie). Fügen Sie die folgende Zeile am Anfang der Datei ein (sie kann auch an anderen Stellen in dieser Datei funktionieren).

FallbackResource /r.php

Die Anweisung FallbackResource legt einen Handler für alle URLs fest, die keiner Datei in Ihrem Dateisystem zugeordnet sind. Der Handler r.php ist bereits im Hauptverzeichnis von Moodle vorhanden.

Mit Root-Zugriff

Zum Ändern der Apache2-Konfigurationsdatei ist Root-Zugriff erforderlich. Dies kann den zusätzlichen Aufwand wert sein, da Apache darauf hinweist, dass die Verwendung von .htaccess anstelle einer Konfigurationsdatei zu einer Leistungseinbuße führt. Der Speicherort der Konfigurationsdatei kann mit dem Befehl httpd -V ermittelt werden. Wenn dies nicht funktioniert, werden von Apache gängige Speicherorte angegeben, und Befehle zum Auffinden des Speicherorts finden Sie unter how-can-i-find-out-where-the-httpd-conf-file-is-located stackoverflow. Ein Teil der Ausgabe von httpd -V ist unten dargestellt.

 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/apache2"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

Die Daten in der dritten und letzten Zeile, HTTPD_ROOT und SERVER_CONFIG_FILE, können kombiniert werden, um den Speicherort von httpd.conf anzugeben, der in diesem Fall /etc/apache2/conf/httpd.conf lautet. Wechseln Sie in das Verzeichnis, das diese Datei enthält, und führen Sie den Befehl grep -i moodle httpd.conf aus. Dadurch werden alle Zeilen – etwa 20 – aufgelistet, die moodle in der Datei enthalten (das -i macht die Suche groß-/kleinschreibungsunabhängig). Suchen Sie die entsprechenden Versionen der folgenden beiden Zeilen, die die Anweisungen DocumentRoot und Directory enthalten.

DocumentRoot /home/USER/public_html/moodle 
<Directory „/home/USER/public_html/moodle“>

Anstatt die Datei httpd.conf zu bearbeiten, werden Änderungen mit der Anweisung Include vorgenommen. Wenn Apache aktualisiert wird, wird die Datei httpd.conf möglicherweise neu erstellt, aber die Änderungen in den Include-Dateien bleiben weiterhin verfügbar. Für Details zum Ändern der Include-Dateien wird empfohlen, die Dokumentation Ihres Systems zu überprüfen. Das folgende Beispiel bezieht sich auf das Webhosting-Control-Panel cPanel.

Speichern Sie unter den oben genannten zwanzig Zeilen auch die Zeile Include, die ssl statt std enthält.

# Include „/etc/apache2/conf.d/userdata/ssl/2_4/USER/moodle.example.org/*.conf“

Beachten Sie, dass „USER“ durch den tatsächlichen Benutzernamen ersetzt werden muss. Außerdem ist die Include-Anweisung in diesem Beispiel auskommentiert, da an der angegebenen Stelle keine passende Datei gefunden wurde (cPanel hebt die Auskommentierung der Anweisung automatisch auf, wenn eine Datei an dieser Stelle gefunden wird). Navigieren Sie zum Speicherort der erwarteten *.conf-Datei. Außerhalb des Verzeichnisses 2_4 müssen Sie wahrscheinlich mkdir verwenden, um die anderen Unterverzeichnisse (d.h. die Verzeichnisse USER und moodle.example.org) zu erstellen. Erstellen Sie in diesem letzten Verzeichnis eine Datei, z.B. includeRoute.conf. Fügen Sie der Datei die ersten beiden oben gespeicherten Zeilen sowie die letzten fünf hier gezeigten Zeilen hinzu, sodass der Inhalt wie folgt aussieht:

DocumentRoot /home/user/public_html/moodle 
<Directory "/home/user/public_html/moodle">
    AllowOverride None
    Require all granted
    DirectoryIndex index.php
    FallbackResource /moodle/r.php
</Directory>

Das Argument für die Direktive FallbackResource muss möglicherweise in /r.php geändert werden, wenn Moodle keine Subdomain ist (d. h. nicht moodle.example.com). Die Anweisung DirectoryIndex index.php dient dazu, HTTP-404-Fehler beim Moodle-Router zu verhindern. Die Anweisung [https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require Require all granted ermöglicht authentifizierten Benutzern uneingeschränkten Zugriff. Führen Sie nach dem Speichern der Datei die folgenden beiden cPanel-Befehle aus, um das System zu aktualisieren.

/usr/local/cpanel/scripts/rebuildhttpdconf 
/usr/local/cpanel/scripts/restartsrv_httpd

Wenn Sie cPanel nicht verwenden, kann httpd mit apachectl -k graceful neu gestartet werden [1]. Ein Befehl, der rebuildhttpdconf entspricht, ist möglicherweise nicht erforderlich. Überprüfen Sie die Dokumentation Ihres Systems.

Hier ist ein weiteres Beispiel für die Include-Datei.

DocumentRoot /var/www/moodle/public
<Directory /var/www/moodle/public>
    AllowOverride None
    Require all granted
    DirectoryIndex index.php
    FallbackResource /r.php
</Directory>

Die FallbackResource ist relativ zum DocumentRoot, wenn Moodle also in einem Unterverzeichnis liegt, ist der Pfad relativ zu diesem DocumentRoot-Verzeichnis.

DocumentRoot /var/www/moodle/public
<Directory /var/www/moodle/public/moodle>
    AllowOverride None
    Require all granted
    DirectoryIndex index.php
    FallbackResource /moodle/r.php
</Directory>

Nginx konfigurieren

Der Nginx-Server unterstützt die Verwendung einer try_files-Direktive, die in der angegebenen Reihenfolge nach Dateien sucht und die erste gefundene Datei für die Verarbeitung verwendet.

location / {
    try_files $uri /r.php
}

Wenn sich Ihre Moodle-Website in einem Unterverzeichnis befindet, müssen Sie einen genaueren Speicherort angeben.

location /moodle/ {
  try_files $uri $uri/ /moodle/r.php;
}

Wenn Sie mehrere Moodles hosten, möchten Sie möglicherweise eine Groß-/Kleinschreibung berücksichtigende reguläre Ausdrucksübereinstimmung für den Speicherort verwenden:

location ~ ^/(?<sitepath>[^/]*)/ {
  try_files $uri $uri/ /$sitepath/r.php;
}

IIS

Hinweis: Die folgenden Anweisungen sind nicht getestet. Wenn Sie über Kenntnisse zu IIS verfügen und genauere oder aktuellere Anweisungen bereitstellen können, tun Sie dies bitte. Mit dem Modul URL Rewriter für IIS können Sie eine Rewrite-Regel in Ihrer Datei web.config erstellen:

<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>

Moodle konfigurieren

Nachdem Sie den Router erfolgreich konfiguriert haben, sollten Sie Moodle darüber informieren, dass er korrekt konfiguriert ist, indem Sie Folgendes in Ihrer config.php einstellen

$CFG->routerconfigured = true;

Um das System zu testen, melden Sie sich bei Moodle an, öffnen Sie einen Kurs und notieren Sie sich die ID-Nummer in der Adressleiste, die in diesem Beispiel 42 lautet: https://moodle.example.com/course/view.php?id=42. Geben Sie Folgendes in die Adressleiste ein: https://moodle.example.com/my/course/42/manage. Das my sollte nicht enthalten sein, sodass eine eindeutige Fehlerseite wie die folgende angezeigt wird.

Typische Fehlermeldung, wenn FallbackResource funktioniert.

Entfernen Sie my/ aus der Adresse, um zur richtigen Seite zu gelangen.