Handbuch:Kurz-URL/Apache

This page is a translated version of the page Manual:Short URL/Apache and the translation is 54% complete.
Die Kurz-URLs von Wikipedia.

Diese Anleitung hilft bei der Einrichtung von Short URLs auf Apache. Der LiteSpeed Webserver ist Apache-kompatibel und kann auf die selbe Weise konfiguriert werden. Für Informationen über Kurz-URLs oder deren Konfiguration für andere Webserver siehe Handbuch:Kurz-URL . Falls du nicht weißt, welchen Webserver du verwendest oder du einen Hosting-Provider verwendest, benutzt du höchstwahrscheinlich den Apache Webserver.

Einrichtung

Bevor du beginnst, musst du dich für einen Namen für deinen virtuellen "Kurz-URL"-Pfad entscheiden.

In dieser Anleitung werden wir den folgenden empfehlen. Bedenke die Pfade anzupassen, falls du abweichende verwenden möchtest.

  • Das MediaWiki-Verzeichnis befindet sich unter: /w
  • Das gewünschte "Kurz-URL"-Format ist: /wiki/Page_title

Server-Konfiguration

Die richtige Datei finden

Die empfohlene Methode, um Kurz-URLs in Apache einzurichten, ist durch das Bearbeiten der Apache-Konfigurationsdateien. Dafür benötigst du Zugriff auf die Serverkonfiguration. Wenn du dich auf einem gemeinsamen Host befindest, hast du diesen Zugriff wahrscheinlich nicht und benötigst stattdessen eine .htaccess-Datei. .htaccess-Dateien zu benutzen ist weniger effizient und erlaubt nicht so große Anpassung, wenn es um besondere Setups mit mehreren Domains geht, aber sie sind mächtig genug, um die meisten Kurz-URL-Konfigurationen zu erstellen. LiteSpeed-Benutzer sollten stattdessen die .htaccess-Methode benutzen.

Folge den Anweisungen in einem der folgenden beiden Abschnitte, abhängig davon, ob du Root-Zugriff hast, oder stattdessen .htaccess benutzen musst.

Die Apache-Konfigurationsdatei finden (Root-Zugriff)

Die korrekte Konfigurationsdatei, die für Root-Konfigurationen bearbeitet werden muss, kann sich an einem von mehreren Orten befinden.

Die korrekte Konfigurationsdatei, die bearbeitet werden soll, ist diejenige in /etc/apache2/sites-available/, wo die Wiki-Konfiguration eingerichtet wurde. Die meisten Linux-Distributionen richten Apache mit einer Gruppe an sites-available/ und sites-enabled/-Ordnern ein.

Wenn du keine eingerichtet hast und die normale /var/www für deine Wiki-Konfiguration benutzt, kannst du /etc/apache2/sites-available/default bearbeiten.

Vergiss nicht, Overrides durch AllowOverride All in /etc/apache2/apache2.conf zu aktivieren. Das ist standardmäßig in Ubuntu 12.04 und Ubuntu 12.10 deaktiviert.

Wenn deine Distribution diese Ordner nicht hat, dann solltest du die Apache-Konfigurationsdatei direkt bearbeiten. Diese Datei sollte sich bei /etc/apache2/apache2.conf befinden. Beachte, dass sie früher httpd.conf hieß, wenn du httpd.conf hast und kein apache2.conf, dann musst du httpd.conf bearbeiten.

Wenn deine Apache-Konfiguration sich nirgendwo dort befindet, solltest du die Dokumentation für das System, mit dem du Apache installiert hast, zurate ziehen, und damit den Ort der Apache-Konfigurationsdatei finden.

Wenn du dich auf einem gemeinsamen Host ohne Zugriff auf Apache-Konfigurationsdateien befindest, dann musst du stattdessen eine .haccess-Datei benutzen.

In einer Apache-Konfigurationsdatei hast du wahrscheinlich einen VirtualHost-Block, der dein Wiki enthält. Wenn das vorhanden ist, dann müssen dort deine rewrite-Regeln hin. RewriteRule-Konfiguration wird nicht vererbt, also schreibe diese Regeln nicht in die globale Konfiguration, wenn du einen VirtualHost benutzt.

Wenn du die Konfiguration wie oben beschrieben in Apache erstellt hast, musst du Apache neustarten, um die neue Konfiguration anzuwenden.

  • Wenn du Plesk oder cPanel benutzt, sollte es eine Möglichkeit geben, den Server neuzustarten.
  • Auf der Befehlszeile ist der Befehl meistens so ähnlich wie apache2ctl graceful, apachectl graceful, /etc/init.d/apache2 restart oder wie auf den neuesten Fedora-Releases systemctl reload httpd.service. Diese Befehle müssen als root ausgeführt werden, üblicherweise durch Voranstellen von sudo ....

Wo .htaccess abgelegt werden muss

Auf Apache, AllowOverride steuert, ob .htaccess-Dateien die Serverkonfiguration verändern können. Wenn diese Rewrite-Regeln nichts tun, dann musst du die AllowOverride-Einstellung in der Apache-Konfiguration ändern, damit sie FileInfo einschließt. Dafür wird auch Options FollowSymLinks für den Ordner benötigt.

Wenn du eine .htaccess-Datei benutzt, musst du die Datei bearbeiten oder erstellen. Finde den Pfad, der sowohl deinen Skriptpfad und deinen virtuellen Pfad beinhaltet. Das ist üblicherweise das oberste Verzeichnis deiner Seite, aber lasst uns ein paar Beispiele ansehen:

wgScript Beispiel wgArticlePath Beispiel .htaccess-Speicherort
/w/index.php https://www.mediawiki.org/w/index.php?... /wiki/Page_title https://www.mediawiki.org/wiki/Manual:Short_URL /.htaccess
/w/index.php https://www.mediawiki.org/w/index.php?... /Page_title https://www.mediawiki.org/Manual:Short_URL /.htaccess
/mediawiki/index.php https://www.mediawiki.org/mediawiki/index.php?... /view/Article https://www.mediawiki.org/view/Manual:Short_URL /.htaccess
/mysite/mw/index.php https://www.mediawiki.org/mysite/mw/index.php?... /mysite/view/Page_title https://www.mediawiki.org/mysite/view/Manual:Short_URL /mysite/.htaccess

Beachte dass falls du eine Weiterleitung von der Hauptdomain zu der Startseite deines Wikis (z.B. http://example.org/ → http://example.org/wiki/Main_Page) erstellen willst, du die .htaccess Datei immer im höchsten Verzeichnis einrichten musst, selbst wenn andere Verzeichnisse tiefer verschachtelt sind.

Die Rewrite-Regeln erstellen

Es ist einfacher, den Rest dieses Abschnitts zu verstehen, nachdem du einen Blick auf die Apache-Syntax geworfen hast, aber diese Zusammenfassung ist kein Ersatz für die vollständige Apache-Dokumentation:

RewriteCond TestString CondPattern
RewriteRule Pattern Substitution [flags]

Die RewriteCond-Direktive definiert eine Bedingung, die erfüllt sein muss, bevor eine darauf folgende RewriteRule angewendet werden kann. Einer RewriteRule-Direktive können eine oder mehrere RewriteCond-Direktiven vorausgehen. Alle RewriteCond-Direktiven, die einer RewriteRule vorausgehen, müssen wahr sein, bevor diese Regel auf einen URI angewendet werden kann. In den folgenden Beispielen hat TestString die Form eines Verweises auf Servervariablen, z.B. %{ NAME_OF_VARIABLE }. Obwohl viele CondPatterns existieren, verwenden die folgenden Beispiele -f (wahr, wenn TestString eine reguläre Datei ist) und -d (wahr, wenn TestString ein Verzeichnis ist), und ihnen geht ein Negationssymbol, !, voraus.

Die Direktive RewriteRule kann sowohl in der Datei httpd.conf als auch in jeder .htaccess-Datei aufgerufen werden. Wenn die Rewrite-Regel jedoch in .htaccess-Dateien erscheint, wirkt sich der implizite Kontext pro Verzeichnis auf das Pattern der Regel aus, da Regeln relativ zum aktuellen Verzeichnis sind. In .htaccess-Dateien sind die Muster "nicht" relativ zum vollständigen, ursprünglichen URI. Bei .htaccess-Dateien sollten Patterns nie mit einem Schrägstrich, /, beginnen, weil der URI-Substring nie mit einem / beginnen wird. In den folgenden Beispielen wird das L-Flag verwendet, das bedeutet: "Stoppe den Rewriting-Prozess sofort und wende keine weiteren Regeln an".


Für die folgenden Beispiele muss das Modul mod_rewrite in Apache- oder LiteSpeed-Servern aktiviert sein.
Wenn du VirtualHosts verwendest, musst du sicherstellen, dass die Einstellungen innerhalb der VirtualHost-Deklaration festgelegt werden

Die erste Regel, die du in deiner Konfiguration brauchst, ist eine, um die Rewrite-Engine zu aktivieren:

RewriteEngine On

Jetzt brauchen wir eine Regel, die deinen Artikelpfad zu einem virtuellen Pfad macht, der auf index.php zeigt. Ersetze /wiki und /w/index.php durch die Pfade, die du am Anfang gewählt hast (falls sie sich unterscheiden).

RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]
If you decide to customize this, be sure to never include ?title=$1 or something like it in the rewrite. Including a query will cause MediaWiki's built in handling to be overridden and will create bugs on your wiki due to the fact that Apache's query rewrites are broken.[1] The goal here is to alias paths to /index.php and then let MediaWiki itself take care of parsing and routing the url, based on the configuration in LocalSettings.php.

If you are using a root url instead of a normal short url you will need to use the following instead (to ensure that existing files and directories are not seen as article, e.g. "/index.php" "/images" etc.):

RewriteCond %{REQUEST_URI} !^/w/rest\.php
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/w/index.php [L]
If you are using a script path and article path that match such as /mywiki/index.php and /mywiki/Article you will also need to use the same two RewriteCond lines on your RewriteRule. However please note that there is no real valid reason to configure your wiki this way. If your article path is already a subdirectory you should just move your wiki's script path to another directory. Such as /w/index.php and /mywiki/Article or /my/index.php and /mywiki/Article.

Sometimes, the above example doesn't work. The following (you can't set this in a .htaccess, you need root access for this!) might work instead:

Alias /wiki /path/to/your/webroot/w/index.php

Optionally, you can include a rule to show the Main Page on the path itself, to simplify navigation when people visit urls without a page title specified:

# Redirect / to Main Page
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]

The end result should look something like this:

## https://www.mediawiki.org/wiki/Manual:Short_URL/Apache

# Enable the rewrite engine
RewriteEngine On

# Short URL for wiki pages
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]

# Redirect / to Main Page
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]

or, if you used the way with the "Alias" statement:

## https://www.mediawiki.org/wiki/Manual:Short_URL/Apache

Alias /wiki /path/to/your/webroot/w/index.php
# Enable the rewrite engine
RewriteEngine On

# Redirect / to Main Page
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]
Make sure that the order of rules as given in the example is being preserved, i.e. "Short url for wiki pages" must be checked prior to "Redirect / to Main Page".
The ^/? in the config is important because different Apache setups use different regexps. Some want you to use ^wiki/ and some want you to use ^/wiki/. The ? in /? allows this rule to work in both contexts.
The %{DOCUMENT_ROOT} in the config ensures that Apache has the correct non-ambiguous path. However it does not work on some badly configured free hosts. If you have 404 or 403 issues with your RewriteRules, remove the %{DOCUMENT_ROOT} parts and try again.
If your SCRIPT_PATH leads to some other physical location (known as "symlink" in Unix, "shortcut" on Windows, "alias" in Mac OS X), you may need to allow Apache to follow those. You can do so by adding this line above the RewriteEngine:
Options +FollowSymLinks
If the path to your script directory is aliased by the webserver via an Alias directive, as it is in Debian among others, the RewriteRule will work as long as you add the PT flag (ie: change [L] to [PT,L]) to Pass Through the request to the next handler - mod_alias, which will correctly redirect the request, as per Stack Overflow

LocalSettings.php

We need to make the following configurations in LocalSettings.php:

## https://www.mediawiki.org/wiki/Manual:Short_URL
$wgScriptPath = "/w";        // this should already have been configured this way
$wgArticlePath = "/wiki/$1";

If you get an "Internal error" page saying "Redirect loop detected!" after you finish configuration you may be using something other than mod_php. If so you need to explicitly turn on short urls using the following line in your "LocalSettings.php" file:

$wgUsePathInfo = true;

If there is still an "internal error" check the log files of your server. Maybe you have to turn on mod_rewrite module.

Simple instructions

The following is a summary of what to do if you are not doing anything different than what MediaWiki recommends. If you want to do something else, you need to read all of the details above.

  • https://example.com/wiki/Main_Page (url location)
  • /home/me/public_html/mediawiki/w/index.html (index.html location)
  • /home/me/public_html/mediawiki/.htaccess (.htaccess location)

Notice that the .htaccess file is NOT located in the "w" directory, but it is located in the directory above it.

.htaccess source code

RewriteEngine On

# main rewrite rule
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]

# Redirect / to Main Page
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]

LocalSettings.php source code

$wgScriptPath = "/w";
$wgArticlePath = "/wiki/$1";

Online Wizard

It is possible that this wizard will help people generate the short URLs they need. (NOTE: This needs to be tested, or the section removed.)

An automated wizard (requires MediaWiki 1.17 or later) might help:

If you just want your wiki configured quickly or you find the guide confusing then you may want to try that tool first. If you do this, please note that you will need to edit or create a .htaccess file. If you create it anew, please read on to further in this article about where to place the .htaccess file, and please note that this file will likely be in a different folder than the other file that will need to be edited (LocalSettings.php), which is in the installation folder (/w if you have followed the MediaWiki recommendations). Please also note that using this wizard will not work on firewalled or private wikis. In this case, you can still try it out by making your wiki temporarily public by setting $wgGroupPermissions['*']['read'] to true. Remember to change it back to false once you are done.

Siehe auch

References