.htaccess est ignoré même si VirtualHost a «AllowOverride All»

25

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 .htaccessfichier ??

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 commencent à prendre effet. C'est comme si toutes les autres AllowOverride Alldirectives de mes fichiers de configuration étaient ignorées!

Ce qui donne??

Brian Lacy
la source

Réponses:

32

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 à la recherche - quand tout le reste échoue, pensez à la typo toute-puissante.

Brian Lacy
la source
Je n'aurais jamais attrapé ça en un million d'années! J'ai également eu une faute de frappe dans le chemin du répertoire, également un projet de développement ... Merci d'avoir ouvert les yeux.
gillytech
Moi aussi, j'avais une faute de frappe dans la partie répertoire. C'était vraiment frustrant. Ce fut une bénédiction que je sois tombé sur tout cela et que j'ai appris que je pouvais faire des erreurs super idiotes.
Akash Kumar Sharma
Je sais que ça fait 7 ans, mais je voulais juste intervenir et dire que cette réponse m'a aidé. C'était le même genre de chose. J'avais copié des directives d'un autre hôte virtuel et changé le mauvais bit. Merci de partager cette information! Surfez sagement.
dolst le
5

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.

Denis
la source
Le serveur avec lequel je travaille est un serveur de développement, et c'est une copie exacte de notre serveur de production. Les fichiers httpd.conf sont pratiquement identiques. La SEULE différence significative est que notre "virtual.conf" sur ce serveur a moins d'entrées et chaque site est préfixé dev.. Pourtant, le serveur de production fonctionne correctement, les fichiers .htaccess se comportent exactement comme prévu et le serveur de développement ignore simplement le fichier .htaccess.
Brian Lacy
0

Trois suppositions:

Y at - il en fait un espace après la virgule dans la ligne order deny, allowde.htaccess ? Apache n'aime pas ça. Pour moi sur F13, je gagnais 500s.

As tu un AccessFileName directive quelque part?

Si vous utilisez selinux, avez-vous le bon contexte pour le fichier ( ls -lZ)?

Mark Wagner
la source
Je ne reçois pas 500 erreurs. Le fichier .htaccess est simplement ignoré. Et j'ai vérifié que je n'avais pas de place de toute façon. Je ne connais rien au selinux ou aux contextes, mais j'ai cherché comment vérifier et apparemment c'est désactivé. Quant à AccessFileName, je vais regarder autour de moi, mais comme je l'ai dit dans mon commentaire sur la réponse de Denis, la configuration d'apache pour ces deux serveurs est effectivement identique.
Brian Lacy
J'ai également eu des problèmes avec l'espace. Cela m'a rendu fou.
egorgry
Oups, correction: j'ai une directive AccessFileName dans mon httpd.conf. Il se lit comme suit:AccessFileName .htaccess
Brian Lacy
0

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
jmullee
la source