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

13

Je ne peux 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 sur 10.7.3 et je n'ai touché à aucun fichier de configuration à l'exception de l'activation de PHP dans httpd.conf (qui fonctionne).

Je sais qu'il y a au moins 2 questions à ce sujet ici, mais les solutions détaillées là-bas 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 d'oublier quelque chose, sinon je deviens probablement fou, mais ça ne marche pas.

J'ai essayé tous les trucs habituels:

  1. Dans /private/etc/apache2/users/<myusername>.conf, le changement AllowOverride Noneà AllowOverride Allet redémarrez le serveur Web

  2. De plus, dans /private/etc/apache2/httpd.conf, changez n'importe quelle / toutes les occurrences de AllowOverride Noneen AllowOverride All- je l'ai essayé dans tous les différents endroits où ces directives se trouvent

  3. Essayez essentiellement toutes les combinaisons possibles de valeurs pour la Optionsligne au-dessus / en dessous de la AllowOverrideligne, y compris les valeurs:Indexes MultiViews FollowSymLinks All

Bien sûr, redémarrez toujours le serveur Web après un tel changement. Rien de tout cela fonctionne. Toutes mes URL propres ne fonctionnent tout simplement pas; Je reçois un 404 - introuvable. Le journal des erreurs d'Apache me donne juste des erreurs "Le fichier n'existe pas:". Il semble donc que le module mod_rewrite ne fonctionne même pas du tout.

Je me suis assuré que mod_rewrite est chargé dans le httpd.conf, ce qu'il est; il en est ainsi par défaut sur une installation Lion.

Ce qui est fou, c'est que tout fonctionnait parfaitement - jusqu'à ce que je migre vers une nouvelle machine exécutant Lion. Autrement dit, j'écarte une erreur dans mes fichiers .htaccess parce que je sais que cela a fonctionné auparavant. De plus, s'il s'agissait d'une erreur dans le .htaccess, j'obtiendrais une sorte de message d'erreur du module mod_rewrite dans le fichier error_log d'Apache, me disant au moins que le module lui-même est appelé. Mais cela ne se produit pas.

Suis-je en train d'oublier quelque chose? Dois-je modifier les paramètres de configuration ailleurs? Dois-je changer la configuration de PHP? Pourquoi les instructions (comme Comment activer mod_rewrite sur MacOSX Lion et faire fonctionner mod_rewrite sur Mac OS X ) fonctionnent-elles pour d'autres personnes mais pas pour moi? :)

J'ai déjà perdu des heures à ce sujet. Toute aide serait très appréciée.

Niels Heidenreich
la source
BTW, je ne veux pas utiliser MAMP. J'ai utilisé MAMP avant et il ne fonctionnait pas bien avec le MySQL qui est déjà sur mon système. Ce serait remplacer un mal de tête par un autre, donc non merci :)
Niels Heidenreich
BTW Je suis sur OS X Lion standard, PAS sur Lion Server.
Niels Heidenreich
Cela ne répond pas à la question, mais une alternative à la lutte avec l'environnement local de votre Mac pour faire du développement Web consiste à utiliser quelque chose comme Vagrant , qui vous permet de configurer et de gérer facilement les configurations de machines virtuelles.
Dan J

Réponses:

12

Vous devez vous assurer que dans votre /etc/apache2/users/username.conf vous avez les éléments suivants:

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

Les FollowSymlinks et AllowOverride sont essentiels ici. Pendant que vous faites allusion aux deux dans votre question, vous ne les avez peut-être pas configurés correctement en tandem.

Assurez-vous que dans httpd.conf /private/etc/apache2/extra/httpd-userdir.conf est également inclus. C'est par défaut.

Après toute modification, redémarrez le serveur Web pour que les modifications prennent effet.

Si vous rencontrez toujours des problèmes, il y a peut-être un problème avec vos règles de réécriture réelles. Les utilisiez-vous également dans un contexte .htaccess auparavant? Notez que dans un .htaccess, l'expression régulière de la règle de réécriture est comparée à un URI de demande sans la barre oblique de tête et toujours relative au répertoire où réside le .htaccess , tandis que dans un httpd.conf global, l'URI doit correspondre à une barre oblique de tête et est par rapport à la racine Web. Étant donné que vous supposez que votre .htaccess se trouve dans un sous-répertoire de ~ / Sites, vos règles de réécriture peuvent se comporter différemment du moment où le .htaccess réside dans la racine Web d'un hôte (virtuel).

Pour déboguer mod_rewrite, vous pouvez activer la journalisation de la réécriture. Vous devez l'activer dans /etc/apache2/httpd.conf:

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log
Gerry
la source
Merci Gerry. Oui, j'ai essayé ça; viens de l'essayer à nouveau; ne fonctionne malheureusement pas. Je n'ai pas changé le .htaccess, il est dans ~ / Sites /…, comme c'était avant. C'est trop frustrant :(
Niels Heidenreich
Essayez d'activer la journalisation de réécriture comme je l'ai modifié ci-dessus.
Gerry
OK, ce n'est pas du tout un problème avec mod_rewrite, comme il semble; c'est le fichier .htaccess qui est complètement ignoré. Je peux y placer n'importe quel courrier indésirable et je ne reçois aucun message d'erreur. Apache ne le charge donc pas. J'ai vérifié les autorisations, elles sont correctes (le fichier est lisible dans le monde). J'ai essayé de le rendre exécutable, aucun changement.
Niels Heidenreich
Si je place un .htaccess dans / Library / WebServer / Documents et ouvre " localhost " pour le tester, cela fonctionne comme prévu. Cela ne fonctionne tout simplement pas dans "~ / Sites".
Niels Heidenreich
J'ai fait quelque chose de fou et créé un deuxième compte utilisateur avec le nom de connexion "testitester". J'ai défini AllowOverride sur All dans le .conf de cet utilisateur. J'ai placé un .htaccess contenant des fichiers indésirables dans le dossier Sites de cet utilisateur. Si je vais sur localhost / ~ testitester, j'obtiens une erreur 500, comme prévu.
Niels Heidenreich
1

L'ajout d' options + FollowSymLinks a bien fonctionné pour moi

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule
maseth
la source
que fait-il Options +FollowSymLinks? J'ajoute juste cette ligne, cela fonctionne pour moi
Kannika
1

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

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

Pour vérifier et modifier votre fichier .htaccess, faites un clic droit dessus et choisissez Obtenir des informations, puis assurez-vous de supprimer toute extension principale de la fin, comme celle que j'avais:

Et maintenant ça marche!

Jarada
la source
1

Ci-dessous les entrées .htaccess corrigent pour moi

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>
Charles J
la source
0

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

Varun Bhatia
la source
-1

Lorsque vous tapez: / Users / username / app_name

Le / fait référence à la racine du serveur Web:

"localhost /"

Si vous utilisez / ~ username / app_name dans votre réécriture, cela devrait fonctionner.

Bisteces
la source
1
Les chemins commençant par /sont toujours des chemins absolus pour Apache, voir la définition de la racine du serveur Web dans http.conf ( <Directory "/Library/WebServer/Documents">)
nohillside