14 votes

Activer la réécriture d'URL (mod_rewrite) à l'aide de fichiers .htaccess dans ~/Sites sur Lion

Je n'arrive pas à faire fonctionner mod_rewrite sur Lion. Je développe un certain nombre de sites Web localement, dans ~/Sites, en utilisant des fichiers .htaccess. Je suis sous 10.7.3 et je n'ai touché à aucun fichier de configuration, sauf pour activer PHP dans httpd.conf (ce qui fonctionne).

Je sais qu'il y a au moins 2 questions à ce sujet ici, mais les solutions qui y sont détaillées ne fonctionnent pas. Pas plus que les autres solutions que j'ai trouvées sur le web. Je dois faire quelque chose de stupide ou oublier quelque chose, ou bien je suis probablement en train de devenir fou, mais ça ne marche pas.

J'ai essayé tous les trucs habituels :

  1. Sur /private/etc/apache2/users/<myusername>.conf le changement AllowOverride None à AllowOverride All et redémarrer le serveur web

  2. En outre, en /private/etc/apache2/httpd.conf modifier toute(s) occurrence(s) de AllowOverride None à AllowOverride All -- J'ai essayé dans tous les endroits où l'on trouve ces directives.

  3. Essayez pratiquement toutes les combinaisons possibles de valeurs pour l'option Options au-dessus/en dessous de la AllowOverride la ligne, y compris les valeurs : Indexes MultiViews FollowSymLinks All

Il faut toujours redémarrer le serveur web après une telle modification, bien sûr. Rien de tout cela ne fonctionne. Toutes mes urls propres ne fonctionnent tout simplement pas ; j'obtiens un 404 - not found. Le journal des erreurs d'Apache ne donne que des erreurs "File does not exist :". Il semble donc que le module mod_rewrite ne fonctionne pas du tout.

Je me suis assuré que mod_rewrite est chargé dans le fichier httpd.conf, ce qui est le cas ; il l'est par défaut sur une installation Lion.

Le plus fou, c'est que tout fonctionnait parfaitement jusqu'à ce que je migre vers une nouvelle machine fonctionnant sous Lion. En d'autres termes, j'écarte la possibilité d'une erreur dans mes fichiers .htaccess car je sais que cela fonctionnait auparavant. De plus, s'il s'agissait d'une erreur dans le fichier .htaccess, j'obtiendrais une sorte de message d'erreur du module mod_rewrite dans le journal des erreurs d'Apache, m'indiquant au moins que le module lui-même est appelé. Mais ce n'est pas le cas.

Est-ce que je néglige quelque chose ? Dois-je modifier les paramètres de configuration à un autre endroit ? Dois-je modifier la configuration de PHP ? Pourquoi les instructions (comme Comment activer mod_rewrite sur MacOSX Lion y faire fonctionner mod_rewrite sur Mac OS X ) qui fonctionne pour d'autres personnes mais pas pour moi ? :)

J'ai déjà perdu des heures sur ce sujet. Toute aide serait TRÈS appréciée.

12voto

Gerry Points 14225

Vous devez vous assurer que dans votre /etc/apache2/users/username.conf vous avez ce qui suit :

<Directory "/Users/username/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

Les fonctions FollowSymlinks et AllowOverride sont essentielles ici. Bien que vous fassiez allusion à ces deux éléments dans votre question, vous ne les avez peut-être pas configurés correctement en tandem.

Assurez-vous que le fichier httpd.conf /private/etc/apache2/extra/httpd-userdir.conf est également inclus. Il l'est par défaut.

Après toute modification, redémarrez le serveur Web pour que les changements soient pris en compte.

Si vous rencontrez toujours des problèmes, il y a peut-être un problème avec vos règles de réécriture actuelles. Les utilisiez-vous également dans un contexte .htaccess auparavant ? Notez que dans un .htaccess, l'expression de la règle de réécriture est comparée à l'URI de la demande sans le slash de tête et toujours relatif au répertoire où se trouve le fichier .htaccess alors que dans un httpd.conf global, l'URI doit correspondre à un slash de tête et est relatif au Root web. Parce que vous avez supposé que votre .htaccess se trouve dans un sous-répertoire de ~/Sites, vos règles de réécriture peuvent se comporter différemment que lorsque le .htaccess réside dans la racine web d'un hôte (virtuel).

Pour déboguer le mod_rewrite, vous pouvez activer l'enregistrement des réécritures. Vous devez activer cette fonction dans le fichier /etc/apache2/httpd.conf :

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log

1voto

Ajout de Options +FollowSymLinks a bien fonctionné pour moi

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule

1voto

Oorang Points 3415

Je rencontrais un problème similaire où mon fichier .htaccess était complètement ignoré alors qu'il se trouvait dans un sous-dossier de mon répertoire ~/Sites sous un VirtualHost qui était configuré correctement.

Après avoir passé la dernière heure à jouer avec différents fichiers de configuration et à définir AllowOverride All à différents endroits, j'ai finalement découvert que le fichier .htaccess, bien qu'il ressemblait à un fichier .htaccess dans le Finder, était en fait un fichier .htaccess.txt avec l'extension cachée.

Pour vérifier et modifier votre fichier .htaccess, cliquez dessus avec le bouton droit de la souris et choisissez "Get Info". Veillez ensuite à supprimer toute extension à la fin du fichier, comme dans mon cas :

Et maintenant ça marche !

1voto

Charles J Points 11

Les entrées .htaccess ci-dessous me conviennent

Options Indexes FollowSymLinks

<ifModule mod_rewrite.c>

RewriteEngine On
#RewriteBase /~charles/Sites/Timesheet/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]

</ifModule>

0voto

p4bl0 Points 818

Placer le fichier .htaccess dans /Library/WebServer/Documents et ouvrir "localhost/" ; pour le tester, fonctionne comme prévu. Mais cela ne fonctionne pas dans "~/Sites". Merci à Niels Heidenreich pour cela !

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X