Utiliser mod_write pour cleanurls avec Lets Encrypt

J’ai activé le chiffrement sur un serveur exécutant Apache sur Ubuntu 14.04 et utilisé l’option auto pour redirect toutes les requêtes http vers https. Cela fonctionne bien.

Cependant, je veux maintenant utiliser mod_rewrite pour utiliser les cleanurls sur mon site. Tout ce que j’ai à faire est de supprimer l’extension .php de tous les noms de fichiers. (par exemple, https://example.com/contact routes vers https://example.com/contact.php )

J’ai essayé d’append la règle de réécriture suivante au fichier .htaccess:

RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php 

Cette configuration fonctionne correctement sur mon installation localhost (sans SSL) mais ne fonctionne pas sur l’instance exécutant Lets Encrypt.

J’ai testé que le .htaccess fonctionne en ajoutant cette règle qui fonctionne comme prévu (redirect toutes les requêtes www vers le domaine racine)

 RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

Je soupçonne qu’il peut y avoir un conflit entre l’option de configuration automatique Lets Encrypt et ma règle mod_rewrite mais je suis bloqué sur la façon de les faire fonctionner ensemble.

Toute aide serait très appréciée.

Désactiver MultiViews dans .htaccess :

 Options -MultiViews 

MultiViews (partie de mod_negotiation) est susceptible de provoquer un conflit. Cela fait quelque chose de très similaire à ce que vous essayez d’atteindre avec mod_rewrite. Lorsque MultiViews est activé (éventuellement activé dans la configuration du serveur, bien que la valeur par défaut soit désactivée ), une demande pour /filename entraînera la recherche par Apache d’un fichier correspondant (qui renverrait le type MIME approprié) en parcourant les fichiers dans ce répertoire (essayant essentiellement différentes extensions où le nom de base correspond).

J’ai vérifié ce que retourne REQUEST_FILENAME – c’est le chemin du nom de fichier (par exemple, [REQUEST_FILENAME] => /var/www/sitename/public_html/output.php)

Oui, c’est le problème. MultiViews a déjà “corrigé” l’URL ( output vers output.php ) avant que mod_rewrite ait pu faire son travail.