J'exécute un serveur LAMP sur Fedora 13 qui fonctionne bien; cependant, je viens d'ajouter un fichier ".htaccess" au dossier docroot de mon site actuel qui est complètement ignoré.
J'ai essayé une demi-douzaine de tests différents, dont celui-ci:
RewriteEngine on
RewriteBase /
RewriteRule ^.*$ index.php
Mais les images et toutes les autres pages se chargent bien et les fichiers inexistants sont toujours 404. J'ai également essayé ceci:
order deny,allow
deny from all
Mais chaque page se charge toujours très bien. Encore une fois, le fichier .htaccess est tout simplement ignoré à 100%.
Nous mettons nos enregistrements virtualhost dans /etc/httpd/conf.d/virtual.conf. Cela ressemble à ceci:
NameVirtualHost *
<VirtualHost *>
ServerName intranet
DocumentRoot /var/www/default
<Directory "/var/www/default">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *>
ServerName ourwebsite.com
DocumentRoot /var/www/html/ourwebsite.com/docroot
<Directory "/var/www/html/ourwebsite.com/docroot">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Qu'est-ce qui pourrait faire que notre serveur IGNORE complètement le .htaccess
fichier??
Modifier:
J'ai modifié le fichier .htaccess ci-dessus pour mieux démontrer que mes modifications sont ignorées. Notez que j'ai essayé exactement le même fichier .htaccess sur le serveur de production et cela a bien fonctionné.
Modifier 2:
OK, j'ai de nouvelles informations! Juste à des fins de test, j'ai parcouru et changé temporairement CHAQUE directive "AllowOverride" en AllowOverride All
. J'ai compris que la toute première entrée dans l'annuaire semblait l'emporter sur toutes les autres:
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
Quand j'ai changé ça en AllowOverride All
, mes fichiers .htaccess prennent effet. C'est comme tous les autres AllowOverride All
les directives de mes fichiers de configuration sont ignorées!
Ce qui donne??
Incroyable. Rappelez-vous comment j'ai dit qu'il s'agissait d'un serveur de développement? Ouais .. eh bien voici à quoi ressemble vraiment mon entrée d'hôte virtuel:
<VirtualHost *>
ServerName dev.ourwebsite.com
DocumentRoot /var/www/html/dev.ourwebsite.com/docroot
<Directory "/var/www/html/ourwebsite.com/docroot">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Est-ce que tu le vois? Et bien non. J'ai oublié de changer mon entrée "Annuaire" en dev.ourwebsite.com au lieu de ourwebsite.com - et cela a fait toute la différence. J'ai juste supposé qu'Apache aurait jeté une erreur si le répertoire n'existait pas; mais cela ne s'applique qu'à la directive DocumentRoot. est basé sur les correspondances - ce qui signifie qu'il applique les règles s'il correspond à la demande entrante, mais sinon, peu importe si vous le dites à AllowOverride sur les licornes magiques.
Que ce soit une leçon pour tous ceux qui viennent chercher - quand tout le reste échoue, pensez à la typo toute-puissante.
Vérifiez si tout autre "AllowOverride None" présenté dans 'httpd.conf' au-dessus de la déclaration virtualhosts. Vous avez probablement "AllowOverride None" dans docroot.
J'ai eu cela sur un nouveau serveur, j'ai finalement réalisé que la réécriture de mod n'était pas activée par défaut.
ln -s /etc/Apache2/mods-available/rewrite.load /etc/Apache2/mods-enabled/rewrite.load
Trois suppositions:
Y a-t-il réellement un espace après la virgule dans la ligne order deny, allow
dans .htaccess
? Apache n'aime pas ça. Pour moi sur F13, je gagnais 500s.
Avez-vous une directive AccessFileName
quelque part?
Si vous utilisez selinux, avez-vous le bon contexte pour le fichier (ls -lZ
)?