Manuel:URL courte/Apache

This page is a translated version of the page Manual:Short URL/Apache and the translation is 100% complete.
Format des URLs courtes Wikipedia.

Ces instructions vous aident à configurer les URLs courtes sous Apache. Le serveur web LiteSpeed est compatible avec Apache et peut être configuré de la même manière. Pour obtenir des informations sur ce que sont les URL courtes ou sur la configuration pour d'autres types de serveurs, voir Manuel:URL courte . Si vous ne savez pas quel serveur web vous utilisez, il y a de fortes chances que votre hôte utilise Apache.

Configuration

Avant de commencer, vous devez décider quel forme d'URL courte vous souhaitez utiliser.

Dans ce manuel, nous recommandons et supposons ce qui suit. Rappelez vous d'utiliser vos propres chemins s'ils sont différents.

  • Le dossier MediaWiki est localisé sur : /w
  • Le format désiré d'URL courte est : /wiki/Page_title

Configuration du serveur

Trouver le bon fichier

La manière recommandée pour déclarer les URLs courtes dans Apache se fait en modifiant les fichiers de configuration de Apache. Cela demande que vous ayez accès à la configuration du serveur. Si vous êtes sur un hôte partagé, vous ne l'avez probablement pas et vous devrez utiliser un ficher .htaccess à la place. Utiliser des fichiers .htaccess est moins efficace et ne vous procure pas autant de contrôle pour des configurations complexes avec plusieurs domaines, mais les fichiers .htaccess sont assez puissants pour paramètrer la plupart des configurations d'URL courtes. Les utilisatuers de LiteSpeed doivent utiliser la méthode .htaccess .

Utilisez les instructions de l'une des deux sections suivantes, selon que vous avez un accès root ou que vous devez utiliser .htaccess à la place.

Trouver le fichier de configuration Apache (accès root)

Le fichier de configuration correct à modifier pour les configurations root peut se trouver à différents endroits.

Le fichier de configuration correct à éditer est celui de /etc/apache2/sites-available/, dans lequel la configuration de votre wiki a été paramétrée. Le plupart des distributions Linux configurent Apache en initialisant le contenu des répertoires sites-available/ et sites-enabled/ .

Si vous n'en n'avez pas configuré et que vous utilisez le /var/www par défaut pour la configuration de votre wiki, alors vous pouvez modifier /etc/apache2/sites-available/default.

N'oubliez pas d'autoriser les réécrasements par AllowOverride All dans /etc/apache2/apache2.conf. Par défaut, il est désactivé dans Ubuntu 12.04 et Ubuntu 12.10.

Si votre distribution ne possède pas cess dossiers, alors il vous faut modifier directement le fichier de configuration Apache. Ce fichier doit être dans /etc/apache2/apache2.conf. Remarquez qu'auparavent, il s'appelait httpd.conf, et si vous avez un httpd.conf mais pas de apache2.conf, alors httpd.conf est celui que vous devez modifier.

Si votre configuration Apache ne fait pas partie de ces points vous devez consulter la documentation pour tout système que vous avez utilisé pour installer Apache, et trouver l'emplacement du fichier de configuration Apache.

Si vous êtes sur un hôte partagé sans accès aux fichiers de configuration Apache, vous devez utiliser un fichier .htaccess à la place.

Dans un fichier de configuration Apache vous allez probablement trouver un bloc VirtualHost contenant votre wiki. Si vous n'en n'avez pas, c'est l'endroit où vous placerez vos règles de réécriture. Le fichier de configuration RewriteRule n'hérite pas, donc ne placez pas ces paramètres de configuration dans la configuration globale si vous utilisez un VirtualHost.

Après avoir initialisé les paramètres comme ci-dessus dans Apache, vous devrez le redémarrer afin qu'il prenne en compte la nouvelle configuration.

  • Si vous utilisez Plesk ou cPanel, ils doivent avoir une méthode pour redémarrer le serveur.
  • A partir de la ligne de commande, la commande est habituellement similaire à apache2ctl graceful, apachectl graceful, /etc/init.d/apache2 restart ou comme sur les dernières versions de Fedora systemctl reload httpd.service. Ces commandes doivent être exécutées en tant que root, habituellement en les préfixant avec sudo ....

Où mettre .htaccess ?

Sous Apache AllowOverride vérifie si les fichiers .htaccess peuvent contrôler la configuration du serveur. Si ces règles de réécriture sont sans effet, vous devez peut-être modifier les paramètres de AllowOverride dans la configuration Apache pour y inclure FileInfo. Il faut également Options FollowSymLinks pour le répertoire.

Si vous utilisez un fichier .htaccess vous devrez modifier ou créer le fichier. Cherchez le chemin qui contient à la fois le chemin de votre script et votre chemin virtuel. Habituellement il s'agit du répertoire racine de votre site, mais voyons quelques exemples :

wgScript Exemple wgArticlePath Exemple chemin .htaccess
/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

Notez bien que si vous voulez faire une redirection à partir du domaine principal vers la page d'accueil de votre wiki (par exemple http://example.org/ → http://example.org/wiki/Main_Page), vous devez toujours configurer le fichier .htaccess au début même si les autres répertoires se trouvent imbriqués plus profondément.

Déclarer les règles de réécriture

Il est plus facile de comprendre la suite de cette section après un coup d’œil rapide à la syntaxe Apache, mais cet aperçu ne remplace pas la documentation complète Apache :

RewriteCond TestString CondPattern
RewriteRule Pattern Substitution [flags]

La directive RewriteCond définit une condition qui doit être vraie avant qu'une directive RewriteRule qui la suit, soit appliquée. Une ou plusieurs directives RewriteCond peuvent précéder une directive RewriteRule, et toutes les directives RewriteCond qui précèdent une RewriteRule doivent être vraies avant que cette règle soit appliquée à un URI. Dans les exemples qui suivent, TestString prend la forme d'une référence à des variables serveur, par exemple %{ NAME_OF_VARIABLE }. Bien qu'il existe de nombreux CondPatterns, les exemples qui suivent utilisent -f (true lorsque TestString est un fichier standard) et -d (true lorsque TestString est un répertoire), et ils sont précédés du symbole de négation, !.

La directive RewriteRule peut être appelée à la fois dans le fichier httpd.conf et dans n'importe quel fichier .htaccess, mais lorsque la règle de réécriture apparaît dans les fichiers .htaccess, le contexte implicite par répertoire affecte le Pattern de la règle car les règles sont relatives au répertoire courant. Dans les fichiers .htaccess, les Pattern ne sont pas relatifs à l'URI d'origine complète. Pour les fichiers .htaccess, les Pattern ne doivent jamais commencer par une barre oblique avant / car la sous-chaîne de l'URI ne commencera jamais par un /. Les exemples qui suivent utilisent l'indicateur L dont la signification est Arrêtez immédiatement le processus de réécriture et n'appliquez plus de règles.


Le module mod_rewrite doit être activé sur les serveurs Apache ou LiteSpeed pour les exemples ci-après.
Si vous utilisez VirtualHosts, vérifiez que les paramètres sont placés dans la déclaration de VirtualHost

La première règle dont vous devez disposer dans votre configuration est celle qui permet d'activer le moteur de réécriture :

RewriteEngine On

Maintenant il nous faut une règle pour que le chemin vers votre article soit un chemin virtuel pointant vers index.php. Vérifiez bien de remplacer /wiki et /w/index.php par les chemins que vous avez choisis au début (s'ils sont différents).

RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]
Si vous décidez de personnaliser cela, assurez-vous de ne jamais inclure ?title=$1 ou quelque chose de similaire dans la réécriture. En incluant une requête, la construction de MediaWiki fera qu'il va gérer sa réécriture et créera des bogues sur votre wiki parce que les réécritures de Apache auront été cassées.[1] L'objectif ici est créer des alias de chemins vers /index.php puis de laisser MediaWiki lui-même prendre soin de l'analyse syntaxique et du routage de l'url, en fonction de la configuration trouvée dans LocalSettings.php.

Si vous utilisez une URL racine au lieu d'une URL courte classique, vous devrez utiliser à la place ce qui suit (pour vous assurer que les fichiers et les répertoires existants ne sont pas vus comme des articles, par exemple « /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]
Si vous utilisez un chemin de script et un chemin d'article correspondant à /mywiki/index.php et /mywiki/Article il vous faudra aussi utiliser les deux mêmes lignes RewriteCond dans votre RewriteRule. Néanmoins, remarquez qu'il n'y a pas de raison valable pour reconfigurer votre wiki de cette façon. Si votre chemin d'articles est déjà un sous-répertoire il suffit de déplacer le chemin des scripts du wiki vers un autre répertoire. Tels que /w/index.php et /mywiki/Article ou /my/index.php et /mywiki/Article.

Quelques fois les exemples ci-dessus ne fonctionnenent pas. Mais ceux qui suivent peuvent convenir (vous ne pouvez pas modifier un .htaccess, il vous faut un accès root) :

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

Optionnellement, vous pouvez inclure une règle pour afficher la page d'accueil sur le chemin lui-même, pour simplifier la navigation lorsque les utilisateurs visitent les URLs sans avoir de titre de page spécifié :

# Redirection/Vers la page d'accueil
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]

Le résultat final devrait être similaire à ceci :

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

# Activer le moteur de réécriture
RewriteEngine On

# URL courte pour les pages du wiki
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]

# Redirection/Vers la page d'accueil
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]

ou si vous avez utilisé la déclaration avec l'alias :

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

Alias /wiki /path/to/your/webroot/w/index.php
# Activer le moteur de réécriture
RewriteEngine On

# Redirection/Vers la page d'accueil
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]
Assurez-vous que l'ordre des règles tel qu'il est donné dans l'exemple est préservé, par exemple « Short url for wiki pages » doit être vérifié avant « Redirect / to Main Page ».
Le ^/? de la configuration est important car différents paramètres Apache utilisent différentes expressions régulières. Certains veulent que vous utilisiez ^wiki/, et d'autres ^/wiki/. Le ? dans /? permet que cette règle fonctionne dans les deux contextes.
Le %{DOCUMENT_ROOT} de la configuration permet à Apache d'avoir le chemin correct non ambigü. Néanmoins il ne fonctionne pas sur certains hôtes gratuits configurés trop misérablement. Si vous obtenez des erreurs 404 ou 403 avec vos directives RewriteRules, supprimez les parties %{DOCUMENT_ROOT} et réessayez.
Si SCRIPT_PATH pointe vers une autre destination physique (connu en tant que « symlink » sous Unix, « raccourci » sous Windows, ou « alias » sous Mac OS X), vous pouvez indiquer à Apache de l'utiliser. Pour ce faire, ajoutez cette ligne au-dessus de RewriteEngine :
Options +FollowSymLinks
Si le chemin vers votre répertoire de scripts possède un alias dans le serveur web défini par une directive Alias, comme c'est le cas entre autre dans Debian, la directives RewriteRule fonctionnera tant que vous ajouterez la marque PT (par exemple : en modifiant [L] en [PT,L]) pour transmettre la requête au gestionnaire suivant - mod_alias, ce qui redirigera correctement la requête, jusqu'au débordement de pile

LocalSettings.php

Nous avons besoin de déclarer les configurations suivantes dans LocalSettings.php :

## https://www.mediawiki.org/wiki/Manual:Short_URL
$wgScriptPath = "/w";        // cela devrait déjà être configuré de cette manière
$wgArticlePath = "/wiki/$1";

Si vous obtenez une page d'erreur interne « Internal error » indiquant qu'une boucle de redirection a été détectée « Redirect loop detected » après que vous ayez terminé la configuration, il est possible que vous utilisez autre chose que mod_php. Si c'est le cas, vous devez activer explicitement les URLs courtes en utilisant la ligne suivante dans votre fichier « LocalSettings.php » :

$wgUsePathInfo = true;

S'il y a encore des erreurs internal error vérifiez les fichiers des journaux concernant votre serveur. Il est possible qu'il faille activer le module mod_rewrite.

Instructions rapides

Voici un résumé de ce qu'il faut faire si vous avez suivi scrupuleusement les recommandations de MediaWiki. Si vous voulez faire autre chose, vous devez lire tous les détails ci-dessus.

  • https://example.com/wiki/Main_Page (emplacement de l'URL)
  • /home/me/public_html/mediawiki/w/index.html (emplacement de index.html)
  • /home/me/public_html/mediawiki/.htaccess (emplacement de .htaccess)

Notez bien que le fichier .htaccess ne se trouve pas dans le répertoire w, mais dans celui de niveau supérieur.

Code source .htaccess

RewriteEngine On

# règle de réécriture principale
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]

# Redirection / vers la page d'accueil
RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]

Code source LocalSettings.php

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

Assistant en ligne

Il est possible que cet assistant va aider les gens à générer les URLs courtes nécessaires. (NOTE: ceci doit être testé, sinon supprimez la section.)

Un assistant automatique (nécessite MediaWiki 1.17 ou plus récent) peut aider :

Si vous voulez simplement configurer votre wiki rapidement, ou que le guide vous semble trop perturbant, alors vous pouvez essayer cet outil en priorité. Si vous faites cela, veuillez noter que vous devrez modifier ou créer un fichier .htaccess. Si vous le recréez à nouveau, veuillez continuer à lire cet article sur où placer le fichier .htaccess, et noter que ce fichier sera probablement dans un dossier différent de l'autre fichier qui devra être modifié (LocalSettings.php), et qui se trouve dans le dossier d'installation (/w si vous avez suivi les recommandations de MediaWiki). Notez aussi que l'utilisation de cet assistant ne fonctionnera pas avec des wikis privés ou dotés d'un pare-feu. Dans ce cas, vous pouvez encore l'essayer en rendant temporairement votre wiki public en initialisant $wgGroupPermissions['*']['read'] à true. Rappelez-vous de revenir en arrière sur false une fois que vous avez terminé.

Voir aussi

Références